SpringBoot 简单整合 quartz 实现定时任务
遇到了定时任务的需求,这里不使用 springboot 自带的 @Scheduled 注解,使用的是第三方框架 quartz。
1、Quartz 核心组件
- 调度器:Scheduler。
- 任务:Job。
- 触发器:Trigger,包括 SimpleTrigger 和 CronTrigger。
1.1、Job(任务):是一个接口,有一个方法 void execute(),可以通过实现该接口来定义需要执行的任务。
1.2、Trigger(触发器):描述触发 Job 执行的时间触发规则,实现类 SimpleTrigger 和 CronTrigger 可以通过crom 表达式定义出各种复杂的调度方案。
1.3、Scheduler(调度器):代表一个 quartz 的独立运行容器。Trigger 和 JobDetail 可以注册到 Scheduler 中。Scheduler 可以将 Trigger 绑定到某一 JobDetail 上,这样当 Trigger 被触发时,对应的 Job 就会执行。一个 Job 可以对应多个 Trigger,但一个 Trigger 只能对应一个 Job 。
2、CronTrigger 表达式规则
可通过在线生成 cron 表达式的工具:http://cron.qqe2.com/ 来生成自己想要的表达式。
以下是 cron 表达式的例子:
3、整合 quartz
3.1、添加 jar 包依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
3.2、实现 Job 接口,在 execute 方法中实现业务逻辑
public class TestJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("===========成功运行定时任务===========");
System.out.println(jobExecutionContext.getJobDetail().getKey());
}
}
3.3、创建启动加载类,创建 JobDetail 实例、Trigger 触发器注册到 scheduler, 并开启调度
@Component
public class TestRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
//创建scheduler
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
//创建TestJob的JobDetail实例,并设置name
JobDetail jobDetail = JobBuilder.newJob(TestJob.class)
.withIdentity("testDetail")
.build();
//cron表达式,每秒执行一次
String cron = "0/1 * * * * ? ";
//创建Trigger触发器,使用cronSchedule方式调度
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("testTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule(cron))
.build();
//注册JobDetail实例到scheduler,并使用对应的trigger触发
scheduler.scheduleJob(jobDetail, trigger);
//启动scheduler
scheduler.start();
}
}
3.4、启动 main 程序,程序加载成功后开始运行任务
参考资料:https://blog.csdn.net/pan_junbiao/article/details/109556822