1、quartz中的组件介绍
①、Scheduler:quartz的主要API,通过它控制quartz下面的组件
②、job:任务接口,通过实现该接口可以自定义需要定时执行任务
③、jobDetail:具体Job实例,需要name和group生成job的唯一key,scheduler通过该key控制任务的暂停、运行、删除等操作。
④、Trigger:触发器,用来定义任务的执行计划。
-
SimpleTrigger:可以配置任务的开始时间、结束时间、重复次数以及重复的间隔。
-
CronTrigger: 通过cron表达式来定义执行计划。
⑤、JobBuilder :用于定义/构建JobDetail实例。
⑥、TriggerBuilder: 用于定义/构建触发器实例。
2、helloworld
①、创建springboot项目
maven中引入坐标:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
②、配置application.yml
spring:
quartz:
auto-startup: true
overwrite-existing-jobs: true
properties:
org:
quartz:
#ID设置为自动获取 每一个必须不同 (所有调度器实例中是唯一的)
scheduler:
instanceId: AUTO
instanceName: clusteredScheduler
#ThreadPool实现的类名
threadPool:
class: org.quartz.simpl.SimpleThreadPool
#ThreadPool配置线程守护进程
makeThreadsDaemons: true
#线程数量
threadCount: 20
#线程优先级
threadPriority: 5
③、实现job接口,创建执行任务
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class TestJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("任务执行了");
}
}
④、执行任务
import com.study.config.TestJob;
@RestController
public class TestQuartzController {
//直接注入quartz任务调度器
@Autowired
private Scheduler scheduler;
@GetMapping("/test")
public String test() throws Exception {
// 通过JobBuilder构建JobDetail实例,JobDetail规定只能是实现Job接口的实例
// JobDetail 是具体Job实例
JobDetail jobDetail = JobBuilder.newJob(TestJob.class).withIdentity("job1", "group1").build();
// 基于表达式构建触发器
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/3 * * * * ?");
// CronTrigger表达式触发器 继承于Trigger
// TriggerBuilder 用于构建触发器实例
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("job1", "group1")
.withSchedule(cronScheduleBuilder).build();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
return "success";
}
}
⑤、测试
启动项目之后在浏览器中输入:http://127.0.0.1:8080/test,可以看到后台会持续打印 “任务执行了。。。”