龙空技术网

干货分享-SpringBoot定时器无废话使用入门

叩丁狼stef 554

前言:

而今同学们对“定时器代码怎么用的”大致比较注意,大家都想要知道一些“定时器代码怎么用的”的相关知识。那么小编也在网络上搜集了一些关于“定时器代码怎么用的””的相关资讯,希望你们能喜欢,朋友们一起来了解一下吧!

SpringBoot中定时器的使用

简介

SpringBoot内置使用Spring task作为定时器,无需额外的操作,直接使用即可。

定时器主要分为两种:

每隔指定时间执行一次任务;例如:应用每隔10分钟去获取最新的天气情况;或者每隔10秒钟,同步一次航班信息;在指定的时间执行一次任务;例如:应用每天晚上1点钟,生成前一天的销售报表;每天早上9点,发送一次催款短信等;

快速使用

1,在Springboot中启用定时器,需要在启动类上添加@EnableScheduling标签:

2,任务开发,在需要作为定时任务的方法上,添加@Scheduled标签:

@Scheduled标签使用

@Scheduled标签提供了非常多属性的配置项,查看@Scheduled标签代码(仅列出重要属性):

其中:

cron:使用cron表达式,完成指定时间执行任务;fixedDelay:上一次任务结束时间点之后X毫秒执行一次任务(一般使用这个);fixedDelayString:允许配置占位符的方式来配置fixedDelay;fixedRate:上一次任务开始时间点之后X毫秒执行一次任务;fixedRateString:允许配置占位符的方式来配置fixedRate;initialDelay:第一次初始化之后延迟X毫秒执行第一次任务;initialDelayString:允许配置占位符的方式来配置initialDelay;

fixedDelay+initialDelay

下面代码演示fixedDelay混合initialDelay的使用方式:

系统打印:

cron表达式

一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。按顺序依次为:

秒(0~59)分钟(0~59)3 小时(0~23)4 天(0~31)5 月(0~11)6 星期(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)年份(1970-2099)

其中,每个元素可以是一个固定的值或者由特殊符号或者通配符构成;

cron表达式支持一些特殊符号和通配符:

“*”字符代表所有可能的值 “/”字符用来指定数值的增量“-”字符用来表示连续的区间"L"字符用在日/星期,代表Last(最后);

一些例子:

*/5 ** * * ?:每隔5秒执行一次0 */1 ** * ?:每隔1分钟执行一次0 0 10,14,16 * * ? :每天上午10点,下午2点,4点0 0 12 * * ?:每天中午12点触发0 15 10 ? * *:每天上午10:15触发0 * 14 * * ?:每天下午2点到下午2:59期间的每1分钟触发0 0/5 14 * * ?:每天下午2点到下午2:55期间的每5分钟触发0 15 10 L * ?:每月最后一日的上午10:15触发

一个使用cron表达式的代码示例

运行结果:

串行执行和并行执行

默认情况下,多任务是单线程串行执行的,适合简单快速的任务。

比如,同时运行上面两个任务(CronTask和SimpleTask),运行结果为:

可以看到,两个任务同时运行在pool-2-thread-1这个线程上;

在Springboot中,要开启并行执行的任务,很简单,只需要配置一个线程池供任务调度器使用即可:

在该代码中,我们创建了一个3个子线程的线程池供任务调度器使用;

再次运行两个任务,执行结果:

可以很明显的看到,分别使用了pool-2-thread-1,pool-2-thread-2,pool-2-thread-3三个线程执行。

原创整理作者:叩丁狼教育

标签: #定时器代码怎么用的