前言
终于抽出时间来写这篇博客了,前段时间用到了调度任务,并且由于要求动态控制,于是就研究了一下,也是遇到了挺多坑,今天来分享一下整合Quartz。
关于Quartz 我在这就不多介绍了,如果有兴趣可以去百度搜索一下。
以往整合Quartz时需要在数据库里面配置对应的表,但是今天我们不那么配置,只需要一张表即可。直奔主题。
建表
create table base_quartz_config
(
configid varchar(64) not null
primary key,
quarta_name varchar(100) null comment '任务名称',
quarta_group varchar(100) null comment '任务组',
status int null comment '状态',
quartz_class varchar(200) null comment '类全名',
remark varchar(200) null comment '备注',
createuserid varchar(64) null comment '创建人',
expression varchar(64) null comment '表达式',
createtime datetime null
)
collate = utf8_bin;
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
编写代码
创建调度工厂类
MySchedulerFactory.java:
@Service("MySchedulerFactory")
@Component
public class MySchedulerFactory {
private static Logger logger = LoggerFactory.getLogger(MySchedulerFactory.class);
@Autowired
SchedulerFactoryBean schedulerFactoryBean;
@Autowired
private BaseQuartzService baseQuartzService;
/**
* 任务配置读取服务
*/
@Autowired
private BaseQuartzService baseQuartzConfigService;
public void scheduleJobs() throws SchedulerException {
Scheduler scheduler = getScheduler();
// 为了避免org.quartz.ObjectAlreadyExistsException,在执行前将scheduler进行清理
scheduler.clear();
startJob(scheduler);
}
/**
* 获取scheduler
*
* @return
* @author Java最强的男人
*/
private Scheduler getScheduler() {
return schedulerFactoryBean.getScheduler();
}
/**
* 项目启动 开启任务
*
* @param scheduler
* @author Java最强的男人
*/
private void startJob(Scheduler scheduler) {
try