当项目部署在多个tomcat上进行集群后,定时任务就会有问题. 多个tomcat都会执行相同的定时任务.最简单的解决办法是把定时器只放到一个tomcat上运行,但是这样就不是集群了.
我们期望的是一台服务挂掉,不影响定时器执行. 这时候就用到了quartz的集群.
其实单机运行的时候,使用spring task 最方便, 2行代码就搞定了. 但是spring task不支持集群. 所以集群的话还是用quartz.
1.集群配置
2.测试
3.删除定时任务
1.集群配置
1)数据库脚本
我们可以想象,一个定时任务,只会执行一次,肯定要有一个全局的人来监控到底是哪个quartz去执行了这个任务,然后让别的quartz不再执行这个任务.
那谁来当这个全局的人呢? 当然是数据库啦. quartz官方也提供了基于内存的Terracotta来管理. 我们这里就用数据库了.
去下载quartz的压缩包,里面自带sql脚本文件.点击打开链接
我们这里用的数据库是 mysql,innodb引擎的. 所以执行标红的sql脚本.
2) 配置文件
首先在spring-quartz中,增加个执行器配置,用于任务注册
<bean id="executor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="100" />
<property name="queueCapacity" value="500" />
</bean>
然后在总管理类中增加一些属性配置
<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property na