1、cron表达式格式
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
2、格式详解
字段 | 有效范围 | 特殊字符 |
秒 | 0~59 | , - * / |
分钟 | 0~59 | , - * / |
小时 | 0~23 | , - * / |
日期 | 0~31 | , - * / ? L W C |
月 | 0~11 | , - * / |
星期 | 1~7 或 SUN,MON,TUE,WED,THU,FRI,SAT | , - * / ? L # C |
年份 | 1970~2099 | , - * / |
由于"日期"和"星期"这两个元素互斥的,必须要对其中一个设置"?"。
通配符 | 含义 |
, | 用来列出枚举值值 例如:在分钟字段里用“5,20”意味着在5和20分每分钟触发一次 |
- | 指定一个值的范围 |
* | 代表所有可能的值 |
/ | 用来指定数值的增量 例如:在分钟字段里用“0/15”表示从第0分钟开始,每15分钟 |
? | 表示不指定值 |
L | 用在日期表示一个月中的最后一天 例如:6L,表示某月的倒数第6天 用在星期表示一个月中的最后一个星期x 例如:FRIL,表示某月的最后一个星期五 |
W | 指定离给定日期最近的工作日(周一到周五) 例如:在日期字段用“15W”指这个月最接近第15天的工作日, 如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发 如果这个月第15天是周日,那么触发器将会在这个月第16天即周一触发 |
C | 指和日历关联后计算过的值 例如:在日期 字段用“5C”指在这个月第5天 在星期字段用“1C”指在周日 |
# | 表示该月第几个星期x 例如:4#2,表示某月的第二个星期三 6#3,表示某月的第三个星期五 |
3、常用例子
"0 0 12 * * ?" 每天12点触发
"0 0 12,20 * * ?" 每天12点和20点触发
"0 0/5 * * * ?" 每隔5分钟触发一次
"0 0 10 * * ? 2015" 2015年的每天10点触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
4、在Spring中使用Cron表达式
在Spring中,我们可以使用Cron来做定时器,执行定时任务,使用注解@Scheduled和@EnableScheduling。
在你要定时执行的事务上添加注解和Cron表达式,如:
public class MyTask {
@Scheduled(cron = "0 0 10 * * ?") // 每天10点执行一次
public void work() {
// task execution logic
}
}
在@Configuration的类上添加@EnableScheduling注解
@Configuration
@EnableScheduling
public class AppConfig {
// various @Bean definitions
}