Quartz.NET 定时任务框架中的 CronTrigger 完全指南
quartznet Quartz Enterprise Scheduler .NET 项目地址: https://gitcode.com/gh_mirrors/qu/quartznet
什么是 CronTrigger
在 Quartz.NET 定时任务框架中,CronTrigger 是基于经典 UNIX cron 表达式实现的强大触发器类型。它能够实现各种复杂的调度需求,比如"每周一到周五早上8点执行"或"每月最后一个周五凌晨1:30执行"等场景。
Cron 表达式结构解析
一个标准的 cron 表达式由6-7个字段组成,字段间用空格分隔。各字段含义如下:
| 字段名 | 必填 | 取值范围 | 允许的特殊字符 | |----------------|---------|-------------------|------------------------| | 秒(Seconds) | 是 | 0-59 | , - * / | | 分(Minutes) | 是 | 0-59 | , - * / | | 小时(Hours) | 是 | 0-23 | , - * / | | 日期(Day) | 是 | 1-31 | , - * ? / L W | | 月份(Month) | 是 | 1-12或JAN-DEC | , - * / | | 星期(DayWeek) | 是 | 1-7或SUN-SAT | , - * ? / L # | | 年(Year) | 否 | 空或1970-2099 | , - * / |
特殊字符详解
-
*
通配符
表示该字段所有可能的值。例如在分钟字段使用*
表示"每分钟"。 -
?
不指定值
用于需要忽略的字段。例如要在每月10号触发而不关心星期几,可以设置为10 * * ? * *
。 -
-
范围符
指定一个范围值。如10-12
在小时字段表示10点、11点和12点。 -
,
枚举符
指定多个离散值。如MON,WED,FRI
表示周一、周三和周五。 -
/
步长符
指定增量。如0/15
在秒字段表示0秒、15秒、30秒和45秒触发。 -
L
最后符
在不同字段有不同含义:- 在日期字段表示当月最后一天
- 在星期字段单独使用时表示周六(7)
- 结合其他值如
6L
表示"当月最后一个周五"
-
W
工作日符
指定最近的工作日。如15W
表示"离15号最近的工作日",如果15号是周末则自动调整到邻近工作日。 -
#
序号符
指定月份中第几个星期几。如6#3
表示"当月第三个周五"。
实用示例大全
| 表达式 | 说明 | |:-----------------------|:------------------------------------------------------------------------| | 0 0 12 * * ?
| 每天中午12点触发 | | 0 15 10 ? * MON-FRI
| 每周一到周五上午10:15触发 | | 0 0/5 14,18 * * ?
| 每天14:00-14:55和18:00-18:55期间,每5分钟触发一次 | | 0 15 10 L * ?
| 每月最后一天上午10:15触发 | | 0 15 10 ? * 6L
| 每月最后一个周五上午10:15触发 | | 0 15 10 ? * 6#3
| 每月第三个周五上午10:15触发 | | 0 0 12 1/5 * ?
| 从每月1号开始,每5天在中午12点触发一次 | | 0 11 11 11 11 ?
| 每年11月11日11:11触发(特殊日期提醒) |
使用注意事项
-
日期与星期冲突
目前不支持同时在日期和星期字段指定具体值,必须在一个字段使用?
。 -
夏令时问题
在夏令时切换期间设置触发时间要特别注意,可能会导致时间跳过或重复。 -
月份和星期的名称
使用月份和星期的英文名称时大小写不敏感,JAN
和jan
等效。 -
边界情况
使用W
字符时,当指定日期是1号且为周末时,不会跨月调整,而是顺延到当月第一个工作日。
通过掌握这些规则和示例,您可以在 Quartz.NET 中灵活配置各种复杂的定时任务调度方案。建议先从简单表达式开始测试,逐步构建更复杂的调度逻辑。
quartznet Quartz Enterprise Scheduler .NET 项目地址: https://gitcode.com/gh_mirrors/qu/quartznet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考