问题描述
开启集群特性后,配置的任务会存储在qz数据表中,表中会存储任务的执行时间等详情信息,当要修改某个任务的执行时间时,如果该任务已保存在表中,则修改的时间并不会如期执行,还是以表中存储的执行时间为准,这时可以采用清空表数据,让任务信息重新存储,其实官方给了解决此问题的办法,就是配置可重写任务信息,具体看下文中的代码部分
如何开启Quartz集群模式
使用Spring集成Quartz,在配置文件配置调度器时必须需加载quartz.properties才能够开启集群
<!-- Scheduler factory bean to glue together jobDetails and triggers to Configure Quartz Scheduler -->
<bean id="ecpQuartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
加载quartz.properties配置文件才能使用集群特性,否则默认为单机模式
<property name="configLocation" value="classpath:quartz.properties"/>
重写任务配置信息,这样当修改任务执行时间后,不用清数据库表就会生效,程序会自动修改对应任务的执行时间
<property name="overwriteExistingJobs" value="true" />
<property name="triggers">
<list>
<ref bean="miniTokenCronTrigger"/>
<ref bean="initReportDataJobTrigger"/>
<ref bean="clearOAuthCodeMapTrigger"/>
<ref bean="submitAduitRemindCronTrigger"/>
<ref bean="surveyRepeatRemindCronTrigger"/>
<ref bean="historyImageDataJobTrigger"/>
</list>
</property>
<property name="applicationContextSchedulerContextKey" value="applicationContext" />
</bean>
quartz.properties配置开启集群功能
org.quartz.jobStore.isClustered=true
需注意如下配置,否则启动会报错(报错原因尚不清楚)
durable, 指明任务就算没有绑定Trigger仍保留在Quartz的JobStore
网友评论