Java @Scheduled定时器用法解析
作者:Schon_zh
这篇文章主要介绍了Java @Scheduled定时器用法解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
@Scheduled定时器用法
程序中若需要在某个时间循环执行某项任务,就可以使用@Scheduled定时器
源码如下:
@Scheduled(cron="0 0 21 * * ?") //每天晚上九点执行一次 21点 public void taskCycle() throws Exception{ System.out.println("############定时校验代金券过期任务开始执行"); }
@Scheduled(cron="0 0 21 * * ?")
配置完整格式为: [秒] [分] [小时] [日] [月] [周] [年]
其中每个元素 可以是一个值(如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的几种使用方式
两个方法串行执行
直接在方法上加上@Scheduled注解,
两个方法并行,且自己也并行
添加@EnableAsync和@Async注解
两个方法并行,且自己串行
做如下配置,就可以实现了
@Configuration @EnableScheduling public class ScheduleConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(taskExecutor()); } @Bean(destroyMethod="shutdown") public Executor taskExecutor() { return Executors.newScheduledThreadPool(2); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。