Spring定时任务设置有两种方式:注解和xml配置,推荐使用注解,在本文章也主要介绍注解方式配置@mikechen
注解@Scheduled
开启Spring的Scheduler非常简单,一个注解@EnableScheduling即可。
基于注解是一种静态的方式,只需要几行代码就可以搞定了,如下所示:
@Component public class ScheduledTest { private Logger logger = LoggerFactory.getLogger(ScheduledTest.class); /** * 每15秒执行一次定时任务 */ @Scheduled(cron = "0/15 * * * * ? ") public void testCron(){ logger.info("Scheduled 执行一次定时任务"); } }
上面通过@Scheduled注解开启定时任务,后面的cron = “0/15 * * * * ? “,这个是Cron表达式,通过Cron表达式来指定任务在某个时间点或者周期性的执行。
在使用定时调度任务的时候,我们最常用的就是Cron表达式了,是Spring的@Scheduled,还是用Quartz框架,都支持Cron表达式。
Cron表达式语法
Cron表达式是一个字符串,语法如下图所示:
- 第一位,表示秒,取值0-59;
- 第二位,表示分,取值0-59;
- 第三位,表示小时,取值0-23;
- 第四位,日期天/日,取值1-31;
- 第五位,日期月份,取值1-12;
- 第六位,星期,取值可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT;
- 第七位,年份,可以留空,取值1970-2099;
Cron表达式特殊字符
“*”字符:每的意思,在不同的字段上,就代表每秒,每分,每小时等
“?”字符:表示不确定的值;
“,”字符:指定数个值;
“-”字符:指定一个值的范围;
“/”字符:指定一个值的增加幅度,比如:n/m表示从n开始,每次增加m;
“L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X;
“W”字符:指定离给定日期最近的工作日(周一到周五);
“#”字符:表示该月第几个周X,比如:6#3表示该月第3个周五;
在大部分使用Cron的场景下, – * / ? 这几个常用字符就可以满足我们的需求了。
Cron表达式示例
0 * 14 * * ? * : 代表每天从14点开始,每一分钟执行一次;
0 0 14 * * ? * : 代表每天的14点执行一次任务;
0 0 23 * * ?:每天23点执行一次;
0 0 0,13,18,21 * * ?:每天的0点、13点、18点、21点都执行一次;
0 0 5-15 * * ? :每天5-15点整点触发;
mikechen睿哥
mikechen睿哥,十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》