Quartz
Quartz是一个定时任务框架。这里要介绍一下Quartz里的几个非常核心的接口。
Scheduler接口
Scheduler翻译成调度器,Quartz通过调度器来注册、暂停、删除Trigger和JobDetail。Scheduler还拥有一个SchedulerContext,顾名思义就是上下文,通过SchedulerContext我们可以获取到触发器和任务的一些信息。
Trigger接口
Trigger可以翻译成触发器,通过cron表达式或是SimpleScheduleBuilder等类,指定任务执行的周期。系统时间走到触发器指定的时间的时候,触发器就会触发任务的执行。
JobDetail接口
Job接口是真正需要执行的任务。JobDetail接口相当于将Job接口包装了一下,Trigger和Scheduler实际用到的都是JobDetail。
整合过程
引入依赖
Gradle
implementation 'org.springframework.boot:spring-boot-starter-quartz'
maven
<!-- SpringBoot 整合 Quartz 定时任务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
TimingTask
创建TimingTask类,并继承 QuartzJobBean 类,重写 void executeInternal(JobExecutionContext jobExecutionContext) 方法
public class TimingTask extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
System.out.println("定时任务开始了......");
}
}
QuartzConfig
创建 Quartz定时任务配置类(QuartzConfig.java),添加 @Configuration 注解表示为配置类,并编写相关配置信息,设置每24小时执行一次
@Configuration
public class QuartzConfig {
private static final String SEARCH_TASK_IDENTITY = "TaskQuartz";
@Bean
public JobDetail quartzDetail() {
return JobBuilder.newJob(TimingTask.class).withIdentity(SEARCH_TASK_IDENTITY).storeDurably().build();
}
@Bean
public Trigger quartzTrigger() {
//每24小时执行一次
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
// .withIntervalInSeconds(120) //设置时间周期单位秒
.withIntervalInHours(24) //24个小时执行一次
.repeatForever();
return TriggerBuilder.newTrigger().forJob(quartzDetail())
.withIdentity(SEARCH_TASK_IDENTITY)
.withSchedule(scheduleBuilder)
.build();
}
}