乐趣区

关于java:定时任务之一-Scheduled注解

java 定时工作之一 @Scheduled 注解(第一种办法)

应用 spring @Scheduled 注解执行定时工作:

步骤:

1.xmlns 增加:

1.  http://www.springframework.org/schema/task   
2.  http://www.springframework.org/schema/task/spring-task-3.1.xsd    
3.  xmlns:task="http://www.springframework.org/schema/task"

2. 注入:

<task:annotation-driven/>

3. 注解写在实现类的办法上,实现类上要有组件的注解 @Component

@Scheduled(cron="0/5 * *  * * ?")   // 每 5 秒执行一次

运行即可!!!

对于 Cron 表达式介绍

cronExpression 定义工夫规定,Cron 表达式由 6 或 7 个空格分隔的工夫字段组成:秒 分钟 小时 日期 月份 星期 年(可选)

1.  字段  允许值  容许的特殊字符     
2.  秒       0-59     , - * /     
3.  分       0-59     , - * /     
4.  小时      0-23     , - * /     
5.  日期      1-31     , - * ? / L W C     
6.  月份      1-12     , - * /    
7.  星期      1-7       , - * ? / L C #     
8.  年     1970-2099     , - * /

“*”字符被用来指定所有的值。

如:

“*”:字符在分钟的字段域里示意“每分钟”。
“?”:字符只在日期域和星期域中应用。它被用来指定“非明确的值”。

当你须要通过在这两个域中的一个来指定一些货色的时候,它是有用的。看上面的例子你就会明确。
月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号来表明不想设置那个字段。

“-”:字符被用来指定一个范畴。如:“10-12”在小时域意味着“10 点、11 点、12 点”。

“,”:字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里示意”星期一、星期三、星期五”。

“/”:字符用于指定增量。

如:“0/15”在秒域意思是每分钟的 0,15,30 和 45 秒。

“5/15”在分钟域示意每小时的 5,20,35 和 50。

符号“”在“/”后面(如:/10)等价于 0 在“/”后面(如:0/10)。

记住一条实质:表达式的每个数值域都是一个有最大值和最小值的汇合,如:

秒域和分钟域的汇合是 0 -59,日期域是 1 -31,月份域是 1 -12。字符“/”能够帮忙你在每个字符域中取相应的数值。如:“7/6”在月份域的时候只 有当 7 月的时候才会触发,并不是示意每个 6 月。

L 是‘last’的省略写法能够示意 day-of-month 和 day-of-week 域,但在两个字段中的意思不同,例如 day-of- month 域中示意一个月的最初一天。如果在 day-of-week 域示意‘7’或者‘SAT’,如果在 day-of-week 域中后面加上数字,它示意 一个月的最初几天,例如‘6L’就示意一个月的最初一个星期五。

字符“W”只容许日期域呈现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写“15W”,示意:这个月 15 号最近的工作日。所以,如果 15 号是周六,则工作会在 14 号触发。如果 15 好是周日,则工作会在周一也就是 16 号触发。如果 是在日期域填写“1W”即便 1 号是周六,那么工作也只会在下周一,也就是 3 号触发,“W”字符指定的最近工作日是不可能跨月份的。字符“W”只能配合一个 独自的数值应用,不可能是一个数字段,如:1-15W 是谬误的。

“L”和“W”能够在日期域中联结应用,LW 示意这个月最初一周的工作日。

字符“#”只容许在星期域中呈现。这个字符用于指定本月的某某天。例如:“6#3”示意本月第三周的星期五(6 示意星期五,3 示意第三周)。“2#1”示意本月第一周的星期一。“4#5”示意第五周的星期三。

字符“C”容许在日期域和星期域呈现。这个字符依附一个指定的“日历”。也就是说这个表达式的值依赖于相干的“日历”的计算结果,如果没有“日历”关联,则等价于所有蕴含的“日历”。如:日期域是“5C”示意关联“日历”中第一天,或者这个月开始的第一天的后 5 天。星期域是“1C”示意关联“日历”中第一天,或者星期的第一天的后 1 天,也就是周日的后一天(周一)。

例子如下:

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 表达式的介绍起源:

http://blog.csdn.net/supingemail/article/details/22274279

表达式网站生成:

http://cron.qqe2.com/ 

退出移动版