背景
springBoot2.x中集成了quartz的自动配置类(QuartzAutoConfiguration),可是springBoot提供的配置属性中并无提供overwriteExistingJobs这个属性的设置。java
致使的问题
假如咱们使用quartz自带的数据库对任务进行了持久化且系统并无提供对任务的界面化操做。当咱们须要对任务进行修改时,更改了代码或者配置文件中的信息,如参数、corn表达式等,会发现新的表达式并无生效(缘由是咱们没有设置overwriteExistingJobs参数)spring
解决方案
在quartz自动初始化以后,咱们获取SchedulerFactory,设置overwriteExistingJobs参数,而后得到Scheduler,经过Scheduler从新设置全部Trigger.数据库
代码实现ui
package com.koolyun.eas.account.scheduler.config; import org.quartz.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import javax.annotation.PostConstruct; import java.util.List; /** * @author bozheng * @date 2018/10/10 15:48 */ @Configuration @AutoConfigureAfter(QuartzAutoConfiguration.class) public class QuartzSupportConfig{ @Autowired(required = false) private List<Trigger> triggers ; @Autowired SchedulerFactoryBean schedulerFactoryBean; @PostConstruct public void quartzScheduler() throws SchedulerException { schedulerFactoryBean.setOverwriteExistingJobs(true); if (triggers != null){ Scheduler scheduler = schedulerFactoryBean.getScheduler(); for (Trigger trigger : triggers){ scheduler.rescheduleJob(trigger.getKey(),trigger); } } } }