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
