Spring的定时任务 cron表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring的定时任务 cron表达式相关的知识,希望对你有一定的参考价值。
cron表达式是什么:首先cron是表示计划任务,也就是说cron表达式通常用于配置计划任务的触发时间。
一个cron表达式是一个由六个或者七个子表达式(字段)组成的字符串。而子表达式或者称为字段之间用空格隔开。
字段名 | 是否必需 | 允许的值 | 允许的特殊字符 |
---|---|---|---|
秒(seconds) | Y | 0-59 | , - * / |
分(minutes) | Y | 0-59 | , - * / |
时(hours) | Y | 0-23 | , - * / |
天(day of month) | Y | 1-31 | , - * /L W C |
月(month) | Y | 0-11 或者 JAN-DEC | , - * / |
星期(day of week) | Y | 1-7 或者 SUN-SAT | , - * /?L C# |
年(year) | N | 1970-2099或者不写 | , - * / |
这时就可以明白前面所说的六个或者七个子表达式或者字段是什么意思了,从第一位到最后一位分别表示秒 分 时 天 月 星期 年 最后一位年可以不写。
Cron 触发器利用一系列特殊字符,如下所示:
反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。
字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
下面在举例中详细说明:
表达式 | 表达的时间 |
---|---|
0 0 12 * * ? | 每天中午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 * * ? | 每天下午14点钟开始到14点59分结束这么一个时间段 |
0 0/5 14 * * ? | 每天下午14点到14点55分之间每5分钟触发一次 |
0 0/5 14,18 * * ? | 每天下午14点到14点55分 和18点到18点55分之间 每5分钟触发一次 |
0 0-5 14 * * ? | 每天下午14点开始到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 2002-2005 | 2002年到2005年每个月最后一个周五的10点15分 |
0 15 10 ? * 6#3 | 每个月的第三个周五的10点15分 |
0 0 12 1/5 * ? | 每个月从第一天开始每隔5天中午12点触发一次 |
0 11 11 11 11 ? | 每年11月11号11点11分 |
0 6 * * * | 每天早上6点 |
0 */2 * * * | 每两个小时 |
0 23-7/2,8 * * * | 晚上11点到早上8点之间每两个小时,早上八点 |
0 11 4 * 1-3 | 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 |
0 4 1 1 * | 1月1日早上4点 |
例子如下:
/** * 常规定时任务 */ @Component("timingTask") public class BSS_soa_jobController { @Autowired private BSS_soa_baseService baseService = null; // 每天23:55插入明天数据 @Scheduled(cron = "0 55 23 ? * *") public void addTomrrowData() { baseService.addDaliyData(); } // 如果在当天10点前未将5天前的数据提交到系统,做微信推送 每天上午10:15触发 @Scheduled(cron = "0 15 10 ? * *" ) public void Timer() { } }
以上是关于Spring的定时任务 cron表达式的主要内容,如果未能解决你的问题,请参考以下文章
Spring 定时任务之 @Scheduled cron表达式