spring定时任务

来源:互联网 发布:淘宝怎么发链接充话费 编辑:程序博客网 时间:2024/06/15 14:37

公司没有广播服务,很多数据必须通过定时任务进行同步,总结了一下定时任务的使用:

1. 通过 <context:annotation-config /> 扫描Bean,即扫描@Component等注解的类;
2. 通过<task:annotation-driven/>扫描定时任务,即扫描Bean中@Schedule注解的函数,即定时任务,例如</task:annotation-driven>
3. 必须要在xml文件中加入相应的命名空间,例如xmlns:task="http://www.springframework.org/schema/task"。
4. 在@Schedule注解中编写cron表达式,定义任务执行的时间规律。


自己一般通过注解使用:@Scheduled(cron ="* * * * * ?") 其中即cron表达式,second,minute, hour, day of month, month ,day of week,year


其中:

类型          取值范围     可使用特殊符号
second         0-59       , / - *

minute         0-59       , / - *

hour           0-23       , / - *

day of month   1-31      , / - * ? ps:网上很多博客提到此处支持L,W是不对的

month          1-12       , / - * FOO,JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC

day of week    1-7        , / - * SUN,MON,TUE,WED,THU,FRI,SAT

year           1970-2099  这个值一般不进行配置

如果使用:fixedDelay 代表固定间隔调度,单位毫秒。

如果使用:fixedRate 代表固定周期调度,单位毫秒。
如果使用:initialDelay  第一次执行延迟时间,单位毫秒。

配置规则:

,表示在逗号分隔的值会发生,比如配置的是小时1,2 这个就表示凌晨1点和凌晨2点两个时间会发生 

*代表所有可能的值

/代表指定数值的增量

比如在分钟的位置配置0/15那么它的意思是每隔15分钟

?问号仅被用于天(月)和天(星期),表示不指定任何值

其中每个元素可以是一个值(如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触发

@Scheduled(fixedDelay =5000) 间隔5000MS运行一次

@Scheduled(cron = "0 0 6 * * ?") 每天6点运行一次

@Scheduled(cron = "0 */2 * * * ?") 每两分钟跑一次

@Scheduled(cron = "0 5 18 * * ?")  每天18点5分跑一次


0 0
原创粉丝点击