博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定时任务CronExpression配置说明
阅读量:6533 次
发布时间:2019-06-24

本文共 2486 字,大约阅读时间需要 8 分钟。

  hot3.png

在配置定时任务时,都需要配置CronExpression,本文档主要介绍了CronExpression如何配置。

一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。

按顺序依次为

  •   秒(0~59)
  •   分钟(0~59)
  •   小时(0~23)
  •   天(月)(0~31,但是你需要考虑你月的天数)
  •   月(0~11)
  •   天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
  •   年份(1970-2099)——@Scheduled是不支持的,spring quartz支持

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.

配置案例:

  •   0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
  •   0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时
  •   0 0 12 ? * WED 表示每个星期三中午12点
  •   "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 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
  •   "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
  •   "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
  •   "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
  •   "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2: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触发

通过上面的例子,可以看出在Cron表达式的时间字段中,除允许设置数值外,还能你使用一些特殊的字符,提供列表、范围、通配符等功能

字段 允许值 允许的特殊字符
0-59 , - * /
0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
  • 星号(*):可用在所有字段下,表示对应时间域名的每一个时刻,如*用在分钟字段,表示“每分钟”。
  • 问号(?):只能用在日期和星期字段,代表无意义的值,比如使用L设定为当月的最后一天,则配置日期配置就没有意义了,可用?作占位符的作用。
  • 减号(-):表示一个范围,如在日期字段5-10,表示从五号到10号,相当于使用逗号的5,6,7,8,9,10
  • 逗号(,):表示一个并列有效值,比如在月份字段使用JAN,DEC表示1月和12月
  • 斜杠(/):x/y表示一个等步长序列,x为起始值,y为增量步长值,如在小时使用1/3相当于1,4,7,10当时用*/y时,相当于0/y
  • L:L(Last)只能在日期和星期字段使用,但意思不同。在日期字段,表示当月最后一天,在星期字段,表示星期六(如果按星期天为一星期的第一天的概念,星期六就是最后一天。如果L在星期字段,且前面有一个整数值X,表示“这个月的最后一个星期X”,比如3L表示某个月的最后一个星期二。
  • W:选择离给定日期最近的工作日(周一至周五)。例如你指定“15W”作为day of month字段的值,就意味着“每个月与15号最近的工作日”。所以,如果15号是周六,则触发器会在14号(周五)触发。如果15号是周日,则触发器会在16号(周一)触发。如果15号是周二,则触发器会在15号(周二)触发。但是,如果你指定“1W”作为day of month字段的值,且1号是周六,则触发器会在3号(周一)触发。quartz不会“跳出”月份的界限。
  • LW组合:在日期字段可以组合使用LW,表示当月最后一个工作日(周一至周五)
  • 井号(#):只能在星期字段中使用指定每月第几个星期X。例如day of week字段的“6#3”,就意味着“每月第3个星期五”(day3=星期五,#3=第三个);“2#1”就意味着“每月第1个星期一”;“4#5”就意味着“每月第5个星期3。需要注意的是“#5”,如果在当月没有第5个星期三,则触发器不会触发。
  • C:只能在日期和星期字段中使用,表示计划所关联的诶其,如果日期没有被关联,相当于日历中的所有日期,如5C在日期字段相当于5号之后的第一天,1C在日期字段使用相当于星期填后的第一天

注:在使用spring taks 不支持年位定时,它毕竟不是quartz,只是简单的定时框架,比起jdk Timer就加入了线程池而以.但是制定到年份,会存在一个问题,就是在你在过了这个时间后再启动项目的时候,他会一直报一个memory leak的错误,大概的意思是你的定时任务将永远不会被执行,导致项目一直启动不了。

转载于:https://my.oschina.net/sdlvzg/blog/1590937

你可能感兴趣的文章
PHP生成HTML静态页面
查看>>
服务器启动django
查看>>
Makefile 中:= ?= += =的区别【转】
查看>>
使用makecontext实现用户线程【转】
查看>>
Comet:基于 HTTP 长连接的“服务器推”技术
查看>>
BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
查看>>
四种方法校验数组中是否包含某个指定的字符串
查看>>
29、Java并发性和多线程-非阻塞算法
查看>>
安装OpenResty开发环境
查看>>
第0课 从0开始
查看>>
python class和class(object)用法区别
查看>>
hadoop无法启动DataNode问题
查看>>
java泛型中<?>和<T>区别
查看>>
这里是指推送通知跟NSNotification有区别:
查看>>
Linux中断(interrupt)子系统之一:中断系统基本原理【转】
查看>>
用户ID的代码生成
查看>>
win7经常出现“关闭xxxx前您必须关闭所有会话框”
查看>>
SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)
查看>>
react-native 常见操作 及 git 补充
查看>>
MongoDB 自己定义函数
查看>>