springBoot2.x设置quartz的overwriteExistingJobs参数

喜欢而已 提交于 2019-11-28 22:57:41

背景
springBoot2.x中集成了quartz的自动配置类(QuartzAutoConfiguration),但是springBoot提供的配置属性中并没有提供overwriteExistingJobs这个属性的设置。

导致的问题
假如我们使用quartz自带的数据库对任务进行了持久化且系统并没有提供对任务的界面化操作。当我们需要对任务进行修改时,更改了代码或者配置文件中的信息,如参数、corn表达式等,会发现新的表达式并没有生效(原因是我们没有设置overwriteExistingJobs参数)

解决方案
在quartz自动初始化之后,我们获取SchedulerFactory,设置overwriteExistingJobs参数,然后获得Scheduler,通过Scheduler重新设置所有Trigger.

代码实现

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

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!