一个Cron-表达式是一个由六至七个字段组成由空格分隔的字符串,其中6个字段是必须的而一个是可选的,如下:
字段名 允许的值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日 1-31 , - * ? / L W C
月 1-12 or JAN-DEC , - * /
周几 1-7 or SUN-SAT , - * ? / L C #
年 (可选字段) empty, 1970-2099 , - * /
'*' 字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。
'?' 字符可以用在“日”和“周几”字段. 它用来指定 '不明确的值'.
这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。在后面的例子中可以看到其含义。
'-' 字符被用来指定一个值的范围,比如在“小时”字段中设为"10-12"表示"10点到12点".
',' 字符指定数个值。比如在“周几”字段中设为"MON,WED,FRI"表示"the days Monday, Wednesday, and
Friday".
'/' 字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为"0/15"表示"第0, 15, 30, 和 45秒"。而
"5/15"则表示"第5, 20, 35, 和 50". 在'/'前加"*"字符相当于指定从0秒开始.
每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23,
对于“日”字段来说为0到31, 而对于“月”字段来说为1到12。"/"字段仅仅只是帮助你在允许的数值范围内从开始"第n"的值。 因此
对于“月”字段来说"7/6"只是表示7月被开启而不是“每六个月”, 请注意其中微妙的差别。
'L'字符可用在“日”和“周几”这两个字段。它是"last"的缩写,
但是在这两个字段中有不同的含义。例如,“日”字段中的"L"表示"一个月中的最后一天" ——
对于一月就是31号对于二月来说就是28号(非闰年)。而在“周几”字段中, 它简单的表示"7" or
"SAT",但是如果在“周几”字段中使用时跟在某个数字之后, 它表示"该月最后一个星期×" ——
比如"6L"表示"该月最后一个周五"。当使用'L'选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。
'W' 可用于“日”字段。用来指定历给定日期最近的工作日(周一到周五) 。比如你将“日”字段设为"15W",意为:
"离该月15号最近的工作日"。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日,
触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为"1W", 而一号又是周六,
触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。'W'字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。
'L'和'W'可以组合用于“日”字段表示为'LW',意为"该月最后一个工作日"。
'#' 字符可用于“周几”字段。该字符表示“该月第几个周×”,比如"6#3"表示该月第三个周五(
6表示周五而"#3"该月第三个)。再比如: "2#1" = 表示该月第一个周一而 "4#5" =
该月第五个周三。注意如果你指定"#5"该月没有第五个“周×”,该月是不会触发的。
'C' 字符可用于“日”和“周几”字段,它是"calendar"的缩写。
它表示为基于相关的日历所计算出的值(如果有的话)。如果没有关联的日历,
那它等同于包含全部日历。“日”字段值为"5C"表示"日历中的第一天或者5号以后",“周几”字段值为"1C"则表示"日历中的第一天或者周日以后"。
对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。
下面是一些完整的例子:
表达式 含义
"0 0 12 * * ?" 每天中午十二点触发
"0 15 10 ? * *" 每天早上10:15触发
"0 15 10 * * ?" 每天早上10:15触发
"0 15 10 * * ? *" 每天早上10:15触发
"0 15 10 * * ? 2005" 2005年的每天早上10:15触发
"0 * 14 * * ?" 每天从下午2点开始到2点59分每分钟一次触发
"0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发
"0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发
"0 15 10 15 * ?" 每月15号的10:15触发
"0 15 10 L * ?" 每月的最后一天的10:15触发
"0 15 10 ? * 6L" 每月最后一个周五的10:15触发
"0 15 10 ? * 6L" 每月最后一个周五的10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月最后一个周五的10:15触发
"0 15 10 ? * 6#3" 每月的第三个周五的10:15触发
---------------------------------------------
Field Name Mandatory? Allowed Values Allowed Special Characters
Seconds YES 0-59 , - * /
Minutes YES 0-59 , - * /
Hours YES 0-23 , - * /
Day of month YES 1-31 , - * ? / L W C
Month YES 1-12 or JAN-DEC , - * /
Day of week YES 1-7 or SUN-SAT , - * ? / L C #
Year NO empty, 1970-2099 , - * /
项目实例:
second minute hours dayOfMonth month dayOfWeek year
每月 0 0 6 ?
* 6#3 ?
每周 59 59 18 ?
* 1 ?
自定义 28 47 9 30
7 ? 2006
每月:每个月的第三个星期五的上午6:00:00 触发
每周:每周的星期日的下午18:59:59 触发
自定义:2006年7月30日上午9:47:28 触发
所有星号对应的段位置,都可以出现后面的符号(, - * /)
(? / L C)这些符号可以出现在"一月哪天"和"星期"段位置
(w)只能出现在"一月哪天"段位置
(#)只能出现在"星期"段位置
解释符号代表的意思:
* 代表任意合法的字段
0 * 17 * * ? :表示在每天的5 PM 到 5:59之间的每一分钟启动scheduler
? 表示没值被指定
如果同时指定"一月哪天"和"星期",可能两者对应不起来
0 0,15,30,45 * * * ? :表示每刻钟启动scheduler
所以推荐用法是其中一个指定值,另一个用?指定
/ 表示时间的增量
0 0/15 * * * ? :表示每刻钟启动scheduler
- 表示值的范围
0 45 3-8 ? * *
L 如果用在"一月哪天"段上,表示一个月的最后一天;如果用在"星期"段上。表示一个星期的最后一天(星期六)
0 0 8 L * ? :表示每个月最后一天的8点启动scheduler
W 表示最靠近给定时间的一天,(必须是星期一到星期五)
# 例如 6#3表示一个月的第三个星期五
分享到:
相关推荐
在Quartz中,`cronExpression`是用于设置基于cron表达式的时间触发规则的关键配置项,这种表达式允许我们以非常灵活的方式定义任务的执行周期。 cronExpression的格式是由7个子表达式组成的字符串,每个子表达式...
其中,cron表达式(cron expression)是用于定义任务执行时间的一种方式,在Spring与Quartz的结合中发挥着重要作用。 #### cron表达式的格式 cron表达式由六个或七个子表达式组成,这些子表达式分别代表: 1. **...
在用户设置了时间规则后,我们需要将其转换为 Unix Cron Expression,以便于 Quartz 任务调度器可以正确地解析和执行任务。我们可以使用 Quartz 提供的 CronExpression 类来实现时间规则的解析和转换。 3. 将转换后...
Cron表达式是Unix/Linux系统中的定时任务调度器Cron所使用的语法,也被广泛应用于Java世界,例如Quartz、Spring等框架。它允许用户以字符串的形式定义任务的执行时间,如分钟、小时、日期等。这个压缩包文件包含了对...
2. **Quartz时间表达式**:Spring_quartz使用方法.txt 和 Spring framework实现定时器之Quartz.txt 这两份文件分别介绍了在Spring框架中如何利用Quartz设置定时任务,以及Quartz的时间表达式(Cron Expression)用法...
在Spring中,我们可以使用`@Scheduled(cron = "CRON_EXPRESSION")`注解,配合Quartz的CronTrigger,方便地在bean上声明基于Cron的定时任务。 总之,通过Spring集成Quartz定时任务框架,我们可以轻松实现复杂的工作...
Cron表达描述符 将 cron 表达式转换为人类可读描述的 .NET 库。 作者:Brady Holt ( )许可证: 特征 支持所有 cron 表达式特殊字符,包括 * / , - ? 体重,# 支持5、6(w /秒或年)或7(w /秒和年)部分cron表达式...
Java中的Cron表达式解析通常是通过Spring框架的`org.springframework.scheduling.support.CronSequenceGenerator`类或者第三方库如Quartz的`org.quartz.CronExpression`来实现。 首先,让我们理解Cron表达式的格式...
在这个例子中,`MyJob`是Job的名称,`MyNamespace.MyJobType`是Job类的全名,`MyCronTrigger`是Trigger的名称,`cron-expression`定义了触发时间的CRON表达式。 **配置文件加载** 为了使Quartz.NET读取并应用`...
6. `org.quartz.triggers.cron.class`: 指定使用CronTrigger,允许按照cron表达式设置触发时间。 三、Job和Trigger的配置 在Quartz中,我们可以通过XML或注解来定义Job和Trigger。XML配置文件(如`quartz_jobs.xml`...
例如,我们可以设计一个`jobs`表,包含`job_name`(任务名)、`job_group`(任务组)、`job_class`(任务类)、`cron_expression`(CRON表达式)等字段。 接下来,我们需要编写一个数据访问层(DAO)来与数据库交互...
- **Cron Expression验证**:确保输入的Cron表达式符合规范,能正确触发任务执行。 3. **关键技术** - **JMX API**:是Java平台的核心组件之一,用于管理和监控Java应用程序,它提供了暴露管理接口的标准方式,使...
`CRON_EXPRESSION`字段包含了Cron格式的时间触发规则。 4. **QRTZ_SIMPLE_TRIGGERS**:对于Simple Trigger,这个表记录了触发间隔、重复次数等简单触发条件。`REPEAT_COUNT`字段表示触发Job的总次数,`REPEAT_...
<cron-expression>0 0/5 * * * ?</cron-expression> </cron> ``` **代码动态调用方式**: 如果你希望在运行时动态创建和管理定时任务,那么可以通过代码来直接操作`IScheduler`接口。首先,你需要初始化一个调度...
// code to fetch the Trigger, update cron expression, and reschedule the job... } // 暂停任务 public void pauseJob(String jobName, String groupName) { // code to pause the job... } // 恢复...
cron-expression: "0 0 9 * * ?" # 每天9点执行 ``` 在启动类上添加`@EnableScheduling`注解,以启用Spring的定时任务功能: ```java import org.springframework.boot.SpringApplication; import org.spring...
<cron-expression>0 0 0 * * ?</cron-expression> </cron> ``` 这个配置文件将 Quartz 的作业信息设置为合适的值,以便满足应用程序的需求。 删除15天之前的录音文件 现在,我们可以使用 Quartz 来删除15天...
与传统的基于UNIX的CRON表达式相比,Quartz提供了更为灵活和丰富的调度机制,支持多种触发器类型,如简单触发器、日历间隔触发器以及更复杂的CronTrigger。 ### 为何选择Quartz Quartz不仅具备了传统的时间调度...
2. **时间表达式(Cron Expression)**: - QuartZ支持Cron表达式,一种用于定义任务执行频率的字符串格式,如"0 0/5 * * * ?"表示每5分钟执行一次。 3. **Job和Trigger的关联**: - JobDetail:包含了Job的实例化...
- `cron-expression`: Cron表达式,用于定义触发作业的精确时间。 Cron表达式是一种强大的工具,允许我们用6个或7个字段定义一个时间模式。例如,`0 0/5 * * * ?`表示每5分钟执行一次,具体解释为:秒(0),分钟...