背景
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); } } } }