完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题
部署说明:
1.创建quartz集群需要的表(web/doc/tables_oracle.sql)
2.引入3个jar包+spring包
quartz-all-1.8.6.jar(web/web-inf/lib)
quartz-expansion.jar(web/web-inf/lib)
quartz-oracle-1.8.6.jar(web/web-inf/lib)
3.修改quartz.properties
修改数据库url,用户名,密码
org.quartz.dataSource.myDS.URL =xxx
org.quartz.dataSource.myDS.user=xxx
org.quartz.dataSource.myDS.password=xxx
4.编写定时任务处理类、
参考cn.medbri.quzrtzexpansion.sendsms.job里面的类
4.修改spring配置
参考web/web-inf/sendsms_config/spring-sendsms.xml 配置
5.详细参考
http://soulshard.iteye.com/blog/337886
附录说明
org.quartz.scheduler.instanceId设置为不同的值,
或者都设置为AUTO。另外org.quartz.jobStore.isClustered属性必须设为true,
org.quartz.jobStore.clusterCheckinInterval属性为集群中每次检查的时间间隔
(按我的理解,应该差不多等于一个服务器挂了之后,其他服务器接手的时间),单位为毫秒,默认值是15000。
concurrent为true,则允许一个QuartzJob并发执行,否则就是顺序执行
shouldRecover属性为true,则当Quartz服务被中止后,再次启动或集群中其他机器接手任务时会尝试恢复执行之前未完成的所有任务
附件是quartz集群demo,解决负载均衡环境下quartz同一定时任务重复跑问题,采用热备方式,一个app server挂掉第二个app server 马上接手定时任务并补上没有跑完的任务。
由于附件太大所有删除了所有lib
只留下了quartz-all-1.8.6.jar(web/web-inf/lib)
quartz-expansion.jar(web/web-inf/lib)
quartz-oracle-1.8.6.jar(web/web-inf/lib)
个lib,请将自己相关lib加入到工程