CronTrigger
是 Quartz Scheduler 中的一种触发器,它使用 Cron 表达式来定义复杂的调度计划。Cron 表达式允许你定义基于特定时间表的任务调度,例如每天的某个时间、每周的某几天等。下面是关于 CronTrigger
的基本用法说明。
1. Cron 表达式基本结构
Cron 表达式由六或七个空格分隔的字段组成,每个字段代表一个时间单位:
秒(0-59)
分钟(0-59)
小时(0-23)
日期(1-31)
月份(1-12 或 JAN-DEC)
星期(0-6 或 SUN-SAT)
年(可选,1970-2099)
2. 创建 CronTrigger
要创建一个 CronTrigger
,可以使用 CronScheduleBuilder
来配置 Cron 表达式。以下是创建一个 CronTrigger
的基本步骤:
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("triggerName", "triggerGroup")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 * * ?")) // 每天中午12点
.build();
3. Cron 表达式示例
-
每天中午12点:
"0 0 12 * * ?"
- 秒:0
- 分钟:0
- 小时:12
- 日期:每一天
- 月份:每个月
- 星期:任何一天
-
每周一上午10点:
"0 0 10 ? * MON"
- 秒:0
- 分钟:0
- 小时:10
- 日期:不指定
- 月份:每个月
- 星期:周一
-
每月1号和15号凌晨1点:
"0 0 1 1,15 * ?"
- 秒:0
- 分钟:0
- 小时:1
- 日期:1号和15号
- 月份:每个月
- 星期:不指定
4. 示例:创建和注册 Job 和 CronTrigger
下面是一个完整的示例,演示如何创建和注册一个 CronTrigger
,以及关联一个 Job
:
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QuartzConfig {
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob(MyJob.class)
.withIdentity("myJob")
.storeDurably() // 持久化
.build();
}
@Bean
public Trigger cronTrigger(JobDetail jobDetail) {
return TriggerBuilder.newTrigger()
.forJob(jobDetail)
.withIdentity("myCronTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 * * ?")) // 每天中午12点
.build();
}
}
5. CronTrigger 的高级用法
-
使用多个表达式:
Cron 表达式支持使用逗号分隔多个值,例如"0 0 10,15 * * ?"
将任务安排在每天的10点和15点。 -
使用范围:
使用短横线定义范围,例如"0 0 10-12 * * ?"
将任务安排在每天的10点到12点每小时执行一次。 -
使用步长:
使用斜杠定义步长,例如"0 0/15 9-17 * * ?"
将任务安排在每天9点到17点之间每15分钟执行一次。
6. 触发器持久化
和 SimpleTrigger
一样,如果希望 CronTrigger
的调度信息持久化,可以在配置文件中设置 job-store
类型为 jdbc
。具体配置可以参考 Quartz 官方文档或 Spring Boot 提供的自动配置。
7. 注意事项
- Cron 表达式中的
?
表示不指定某个字段的值,适用于日期和星期字段。 - Cron 表达式的有效范围和详细语法可以参考 Quartz 官方文档或 Cron 表达式在线工具进行测试。
希望这些说明能帮助你更好地理解和使用 CronTrigger
!如果有更多问题或需要进一步的帮助,请告诉我。