在网上已经有许多例子和demo是实现动态任务管理的。本项目是按照spring boot提供的quartz starter对quartz动态任务进行整合。
- 本次项目实现了:
- 查看所有的定时任务,并可触发运行指定任务
- 动态地暂停或恢复定时任务
- 动态地修改定时任务的频率
- 定时任务和调度计划可以持久化到数据库中(修改的频率也是持久化的)
- 快速启动
- 执行sql目录下的sql文件生成quartz表及动态管理用的数据表
- 修改application.properties配置文件中的数据库连接信息
- 启动TomQuartzApplication中的main方法
- 查看测试任务是否正常打印日志
- 任务管理页面:http://localhost:8080/job
- 关于定制化SchedulerFactoryBean的例子如下:
- 参考接口的代码及说明
/**
* Callback interface that can be implemented by beans wishing to customize the Quartz
* {@link SchedulerFactoryBean} before it is fully initialized, in particular to tune its
* configuration.
*
* @author Vedran Pavic
* @since 2.0.0
*/
@FunctionalInterface
public interface SchedulerFactoryBeanCustomizer {
/**
* Customize the {@link SchedulerFactoryBean}.
* @param schedulerFactoryBean the scheduler to customize
*/
void customize(SchedulerFactoryBean schedulerFactoryBean);
}
- 实现
@Configuration
public class ScheduleConfig {
@Bean
public SchedulerFactoryBeanCustomizer customizer() {
return (schedulerFactoryBean)->{
schedulerFactoryBean.setStartupDelay(10);
schedulerFactoryBean.setOverwriteExistingJobs(true);
schedulerFactoryBean.setSchedulerName("TASK_EXECUTOR");
};
}
}
- spring自动注入
- 在QuartzAutoConfiguration中会找到SchedulerFactoryBeanCustomizer所有实现的bean并遍历执行customizer方法(个人理解)
- spring-boot官方文档:boot-features-quartz 最新版本的spring-boot集成quartz的资料,参考此文档配置SchedulerFactoryBean。
- SpringBoot 中使用 Quartz 定时任务 主要参考此文档代码开发,完善暂停启动功能。(文中其实可以不用手动注入job,具体参考我的代码)。
- quartz的misfire详解 参考此文,解决了quartz启动时连续多次触发任务(实际可能会需要这种操作,具体配置参考misfire的说明)。
- quartz暂停及恢复任务解决恢复时一咕噜把未执行的全补回来的问题 参考此文,重新配置misfireThreshold时间。