0.启动类,加入@EnableScheduling让注解@Scheduled生效。
@SpringBootApplication @EnableScheduling @Slf4j public class Chapter22Application { public static void main(String[] args) { SpringApplication.run(Chapter22Application.class, args); log.info("Chapter22启动!"); } }1.编写一个调度类,系统启动后自动扫描,自动执行。
@Component @Slf4j public class ScheduledTask { /** * 自动扫描,启动时间点之后5秒执行一次 */ @Scheduled(fixedRate=5000) public void getCurrentDate() { log.info("Scheduled定时任务执行:" + new Date()); } }2.启动后,控制台可就看见每5秒一次输出了:
2018-08-18 22:23:09.735 INFO 13812 --- [pool-1-thread-1] c.l.l.s.c.controller.ScheduledTask : Scheduled定时任务执行:Sat Aug 18 22:23:09 CST 2018 2018-08-18 22:23:14.734 INFO 13812 --- [pool-1-thread-1] c.l.l.s.c.controller.ScheduledTask : Scheduled定时任务执行:Sat Aug 18 22:23:14 CST 2018 2018-08-18 22:23:19.735 INFO 13812 --- [pool-1-thread-1] c.l.l.s.c.controller.ScheduledTask : Scheduled定时任务执行:Sat Aug 18 22:23:19 CST 2018 2018-08-18 22:23:24.735 INFO 13812 --- [pool-1-thread-1] c.l.l.s.c.controller.ScheduledTask : Scheduled定时任务执行:Sat Aug 18 22:23:24 CST 2018 2018-08-18 22:23:29.735 INFO 13812 --- [pool-1-thread-1] c.l.l.s.c.controller.ScheduledTask : Scheduled定时任务执行:Sat Aug 18 22:23:29 CST 2018 ......使用都是简单的,现在我们来看看注解@Scheduled的参数意思:
fixedRate:定义一个按一定频率执行的定时任务
fixedDelay:定义一个按一定频率执行的定时任务,与上面不同的是,改属性可以配合initialDelay, 定义该任务延迟执行时间。
cron:通过表达式来配置任务执行时间
Cron表达式详解一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
依次顺序如下表所示:
字段 允许值 允许的特殊字符秒 0~59 , - * /
分 0~59 , - * /
小时 0~23 , - * /
日期 1-31 , - * ? / L W C
月份 1~12或者JAN~DEC , - * /
星期 1~7或者SUN~SAT , - * ? / L C #
年(可选) 留空,1970~2099 , - * /
简单举例:
0/1 * * * * ?:每秒执行一次
0 0 2 1 * ? : 表示在每月的1日的凌晨2点调整任务
0 0 10,14,16 ? :每天上午10点,下午2点,4点
0 0 12 * * ? : 每天中午12点触发
0 15 10 ? * MON-FRI : 周一至周五的上午10:15触发
更多表达式,可访问: 进行在线表达式编写。简单明了。
自定义线程池从控制台输出可以看见,多任务使用的是同一个线程。可结合上章节的异步调用来实现不同任务使用不同的线程进行任务执行。