您的位置:首页 > 编程语言 > Java开发

Spring 定时器配置

2016-03-26 16:28 246 查看
Spring配置使用注解配置定时器很简单,只要@Scheduled(cron = "0 0 0 1 * ?")即可配置一个定时器,至于定时器的几种配置方式,这里暂时不聊,有时间再去研究研究

反而这个定时器配置,每次都是用的时候去百度的,一知半解,今天有时间终于把它完整的学习了下,贴了一些说明过来,给大家看看:http://blog.knowsky.com/260132.htm

1.定时器配置总共可以有7个字段,位置是:秒 分 时 日 月 周几 年(可选)

他们的具体取值范围是:

秒【0-59 , - * /】

分【0-59 , - * /】

时【0-23 , - * /】

日【1-31 , - * / ? L W C】

月【1-12】【JAN-DEC】【, - * /】

礼拜【1-7 , - * / ? L C #】

年(可选)【1970-2099 , - * /】

2.它们的具体意义是:

【*】可以用于所有字段,表示在取值范围内的每一个递增,如在秒中则表示每一秒。

【,】可以用于所有字段,表示或的意思,如在分钟 15,45 表示在15分或45分的时候

【-】可以用于所有字段,表示范围,如在时 1-3 表示1点到3点的每一个小时

【/】可以用于所有字段,表示递增,如在分钟 5/15 表示在允许的范围内从5分开始每15分钟执行一次,即等效于 5,20,35,50

【L】可以用于日和礼拜字段,表示最后的意思,是Last的缩写,在日中表示这个月的最后一天,在礼拜中表示7或者星期六(注意老外的1是礼拜日)

L有一个特殊的用法,就是在礼拜这个字段里面使用,表示“该月最后一个星期X”的意思,如6L,表示该月最后一个星期五。

【W】只用于日字段,表示工作日的意思,会执行离你制定日期最近的一个工作日,如“1W”表示“离1号最近的工作日”,假如1号是周二,则最近的工作日就是1号,假如1号是周六,则会在3号就是周一执行,它不能越界到上一个月的星期五。

LW可以组合使用,表示“这个月的最后一个工作日”。

【#】只用于礼拜字段,表示“第X个礼拜X”的意思,如7#3,表示本月第三个礼拜六的意思,假如本月没有第三个礼拜六,则不执行

【C】可以用于日和礼拜字段,是“Calendar”的缩写,表示为基于相关日历所计算出来的值

【?】这个是一个比较特殊的匹配符,表示排除重复的意思,你可能也注意到了,礼拜字段跟日字段可能会有冲突,而如果你只是想表示其中一个的话,可以使用?来代替日或这个礼拜,这样定时器只会根据另外一个值来执行,如“0 0 12 * * ?”,因为日字段用了*,礼拜字段就没有必要再指定值了,所以用?就可以了。

3.说的好不如自己看看例子吧:

"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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: