SpringBoot集成Quartz,大体分为以下部分:
Scheduler:调度任务的主要APISimpleScheduleBuilder
ScheduleBuilder:用于构建Scheduler,例如其简单实现类
Job:调度任务执行的接口,也即定时任务执行的方法
JobDetail:定时任务作业的实例
JobBuilder:关联具体的Job,用于构建JobDetail
Trigger:定义调度执行计划的组件,即定时执行
TriggerBuilder:构建Trigger
案例代码实现:
1.添加依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
或者 (如果启动项目后,不加载QZ的话,用下面的依赖)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<version>2.3.2.RELEASE</version>
</dependency>
2.创建Job任务类
/**
* 自定义任务类,实现Job类,并实现execute方法
*/
public class TestJob01 implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()) + " Job: 执行任务中...");
}
}
3.创建配置类
/**
* 第一种:Simple类型
* 将该类标记为配置文件
* 创建 JobDetail
* 创建 SimpleTrigger
*/
@Configuration
public class SampleScheduler {
@Bean
public JobDetail getJobDetail(){
return JobBuilder.newJob(TestJob01.class) // JobBuilder构建任务
.withIdentity("saiJob1") // 给该任务起个名字
.storeDurably() // 即使没有Trigger关联时,也不需要删除该JobDetail
.build();
}
@Bean
public SimpleTrigger getTrigger(){
SimpleScheduleBuilder scheduleBuilder =
SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever(); // 创建SimpleScheduleBuilder,并每2秒执行一次
return TriggerBuilder.newTrigger()
.forJob(getJobDetail()) // 给Trigger绑定Job
.withIdentity("saiTrigger1") // 给该触发器起个名字
.withSchedule(scheduleBuilder) // 将该触发器添加到创建好的调度器中
//.startAt(new Date()) // 开始时间
//.endAt(new Date()) // 结束时间
.build();
}
}
或者
/**
* 第二种:Cron类型
* 将该类标记为配置文件
* 创建 JobDetail
* 创建 CronTrigger
*/
@Configuration
public class CronScheduler {
@Bean
public JobDetail getJobDetail2(){
return JobBuilder.newJob(TestJob02.class) // JobBuilder构建任务
.withIdentity("saiJob2") // 给该任务起个名字
.storeDurably() // 即使没有Trigger关联时,也不需要删除该JobDetail
.build();
}
@Bean
public CronTrigger getTrigger2() {
CronScheduleBuilder cronScheduleBuilder =
CronScheduleBuilder.cronSchedule("0/2 * * * * ?"); // 创建SimpleScheduleBuilder,并每2秒执行一次
return TriggerBuilder.newTrigger() // TriggerBuilder 构建 Trigger
.forJob(getJobDetail2()) // 给Trigger绑定Job
.withIdentity("saiTrigger2") // 给该触发器起个名字
.withSchedule(cronScheduleBuilder) // 将该触发器添加到创建好的调度器中
.startNow() // 现在开始执行
//.startAt(new Date()) // 开始时间
//.endAt(new Date()) // 结束时间
.build();
}
}
启动项目,自动加载QZ,执行成功!!!
版权声明:本文为handsome_sai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。