一、QUARTZ核心组件与流程
Quartz是一个开源的Java任务调度框架,支持通过简单配置实现定时任务,例如固定频率执行或基于Cron表达式的复杂调度3。其核心组件包括:
- Scheduler调度器:控制任务的启动、暂停和终止。
- 常用表达式,参考文章 《Spring Schedule 表达式介绍》
- Trigger触发器:定义任务触发规则(如时间、频率)。
- JobDetail工作策略:绑定具体的任务逻辑(Job接口实现类)。
- Job工作:实际执行任务的业务逻辑。
- 工作流程为:Scheduler -> Trigger -> JobDetail -> Job4。
二、SPRINGBOOT整合QUARTZ步骤
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2.定义JOB类
实现Job接口,编写任务逻辑:
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) {
System.out.println("任务执行时间:" + new Date());
}
}
3. 配置调度器与触发器
@Configuration
public class QuartzConfig {
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob(MyJob.class)
.withIdentity("myJob")
.storeDurably()
.build();
}
@Bean
public Trigger trigger() {
return TriggerBuilder.newTrigger()
.forJob(jobDetail())
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) // 每5秒执行一次
.build();
}
}
三、常见问题解决
1. 任务持久化配置
- 问题:应用重启后任务状态丢失。
- 解决:启用数据库持久化,修改application.properties:
- 需提前初始化Quartz数据库表
spring.quartz.job-store-type=jdbc
spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
2. 触发器选择
- SimpleTrigger:适用于固定间隔任务,如每30分钟执行一次。
- CronTrigger:支持复杂调度规则,例如每天凌晨执行: 0 0 0 * * ?5。
3. 任务并发控制
- 若任务未完成时下一次触发已到,默认会并发执行。可通过@DisallowConcurrentExecution注解禁止并发。
四、应用场景
- 一次性任务:如订单超时自动取消(使用SimpleTrigger)。
- 周期性任务:如每日凌晨生成报表(使用CronTrigger)。
- 分布式调度:通过持久化实现多节点协同。