spring4+quartz2 集群后,启动两个tomcat,方法还是重复执行了,没法同一时刻确保一个任务执行

594zzb 发布于 01/14 16:05
阅读 835
收藏 4

我目前用spring4+quartz2.2.1搭建了定时任务集群,然后把项目分别部署到两个tomcat下执行,即每个tomcat启动了两个一样代码的定时任务(任务A和任务B,代码一样,触发时间都设置为每分钟执行),按理,在同一分钟,任务A执行了,那任务B应该是不可以执行的,但是现在打印日志发现,任务A和任务B在同一分钟都执行了,相当于我的spring+quartz集群设置并没有起作用,任务能跑起来,但是就是做不到同一时刻只能一个定时任务在跑,我的架构是spring+dubbo+quartz; 两个web的tomcat服务用的都是同一个service服务,和dubbo架构没关系吧,目前不知道我还少了什么出来才导致quartz集群不生效。。。

quartz.propertis配置如下:

#============================================================
# Configure Main Scheduler Properties
#===========================================================
org.quartz.scheduler.instanceName=MyClusteredScheduler
org.quartz.scheduler.instanceId=AUTO

#===========================================================
# Configure ThreadPool
#===========================================================

org.quartz.threadPool.class =org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=25
org.quartz.threadPool.threadPriority=5

#===========================================================
# Configure JobStore
#===========================================================

org.quartz.jobStore.misfireThreshold=60000

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
#org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties=false
org.quartz.jobStore.dataSource=myDb
org.quartz.jobStore.tablePrefix=QRTZ_

#集群

org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval=20000

#===========================================================
# Configure Datasources
#===========================================================

org.quartz.dataSource.myDb.driver=oracle.jdbc.OracleDriver
org.quartz.dataSource.myDb.URL=jdbc:oracle:thin:@XXX :1521:ORCL
org.quartz.dataSource.myDb.user=XXX
org.quartz.dataSource.myDb.password=XXX
org.quartz.dataSource.myDb.maxConnections=30
org.quartz.dataSource.myDb.validationQuery=select 0 from dual

 

加载中
0
ixiaohei
ixiaohei

任务A和B是怎么区分的?这2个是独立的任务,我看你quartz集群已经保证了没有重复执行啊,因为没有任务在两台同时执行啊。比如A在2台同时执行,或者B在两台同时执行。另外A和B是独立任务,这个你自己去把证AB执行排他的逻辑。

5
594zzb
哎,找到原因了,自己封装的那个序列化类有问题,换一个写法就正常了,原来是任务没有正常写入quartz的数据表,相当于没有用数据库监控到两个任务的资源竞争,自然就重复执行了 参考这个网站配置即可: http://blog.csdn.net/zhanngle/article/details/52574877
0
0
黄正文
黄正文
任务应该保证幂等性,这样可以不用保存任务进度,重复调用。
0
傲娇字符
傲娇字符
要么用分布式调度任务框架,要么加一个分布式锁吧
返回顶部
顶部