定时任务CronExpression配置说明

在配置定时任务时,都需要配置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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值