定时任务 Quartz 很强大,Quartz 提供了灵活且强大的调度功能,支持多种触发器和调度器的配置选项,使得开发者能够轻松地管理定时任务。
Quartz 使用步骤:
1.添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2.编写配置文件
import com.example.springbootredis.job.TaskQuartz;
import com.example.springbootredis.job.TaskQuartz1;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
// 这是一个使用Spring框架配置的Quartz任务调度的配置类
@Configuration
public class QuartzConfig {
// 定义Quartz任务1的标识符
private static final String QUARTZ_TASK_IDENTITY = "QuartzTask";
// 定义Quartz任务2的标识符
private static final String QUARTZ_TASK_IDENTITY1 = "QuartzTask1";
// 定义一个Bean,用于创建Quartz的JobDetail实例
// JobDetail描述了要执行的任务的详细信息
@Bean
public JobDetail quartzDetail(){
// 使用JobBuilder创建一个新的JobDetail实例
// 指定要执行的Job类为TaskQuartz
// 设置JobDetail的标识符为QUARTZ_TASK_IDENTITY
// storeDurably()表示这个JobDetail在Scheduler不存在时也能被保存
return JobBuilder.newJob(TaskQuartz.class)
.withIdentity(QUARTZ_TASK_IDENTITY)
.storeDurably()
.build();
}
// 类似于quartzDetail(),但为TaskQuartz1类创建JobDetail
/* @Bean
public JobDetail quartzDetail1(){
return JobBuilder.newJob(TaskQuartz1.class)
.withIdentity(QUARTZ_TASK_IDENTITY1)
.storeDurably()
.build();
}*/
// 定义一个Bean,用于创建Quartz的Trigger实例
// Trigger定义了JobDetail的调度计划
@Bean
public Trigger quartzTrigger(){
// 创建一个SimpleScheduleBuilder实例,用于构建简单的调度计划
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
// 设置调度间隔为2秒
.withIntervalInSeconds(2)
// 重复执行,直到永远
.repeatForever();
// 使用TriggerBuilder创建一个新的Trigger实例
// 指定这个Trigger是为quartzDetail()中的JobDetail服务的
// 设置Trigger的标识符为QUARTZ_TASK_IDENTITY
// 设置调度计划为上面创建的scheduleBuilder
return TriggerBuilder.newTrigger()
.forJob(quartzDetail())
.withIdentity(QUARTZ_TASK_IDENTITY)
.withSchedule(scheduleBuilder)
.build();
}
// 类似于quartzTrigger(),但为quartzDetail1()中的JobDetail创建Trigger
/*@Bean
public Trigger quartzTrigger1(){
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever();
return TriggerBuilder.newTrigger()
.forJob(quartzDetail1())
.withIdentity(QUARTZ_TASK_IDENTITY1)
.withSchedule(scheduleBuilder)
.build();
}*/
}
// 说明:
// 1. TaskQuartz和TaskQuartz1应该是实现了org.quartz.Job接口的类,用于定义具体的任务逻辑。
// 2. @Configuration注解表明这是一个Spring的配置类,Spring会自动发现并处理其中的@Bean注解。
// 3. @Bean注解表明这是一个需要Spring容器管理的Bean实例,并且方法名通常就是Bean的名字(除非通过@Bean注解的name属性指定了其他名字)。
// 4. JobDetail描述了要执行的任务的详细信息,包括Job类、Job的数据映射等。
// 5. Trigger描述了JobDetail的调度计划,包括何时开始执行、执行的频率等。
// 6. Quartz是一个强大的任务调度框架,Spring框架通过整合Quartz,可以很方便地在Spring环境中使用Quartz进行任务调度。}
3.编写执行任务的类继承自 QuartzJobBean
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.DateUtils;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 定时任务
*/
@Slf4j
public class TaskQuartz extends QuartzJobBean {
@Autowired
XxxService xxxService;
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
log.info("TaskQuartz-------- {}", sdf.format(new Date()));
// 你实际需求需要定时执行的方法
xxxService.xxxMethod1();
xxxService.xxxMethod2();
}
}
上述就是2秒钟执行一次Quartz中定时任务,直接执行XxxService的方法。