您的位置:首页 > 编程语言 > Java开发

spring boot设置定时任务

2018-09-11 10:59 399 查看

使用定时任务完成一些业务逻辑,比如天气接口的数据获取,定时发送短信,邮件。以及商城中每天用户的限额,定时自动收货等等。定时器在项目中是常常会使用到的一个手段。

定时任务在Spring Boot中的集成

在启动类中加入开启定时任务的注解:
在SpringBoot中使用定时任务相当的简单。首先,我们在启动类中加入@EnableScheduling来开启定时任务。

之后我们直接创建实现定时任务的Service即可

@Scheduled

可以使用cron表达式来制定每分钟启动一次定时器,除了该表达式外,还可以使用fixedRate,fixedDelay等来作为时间配置。

第一张图片中输出的ZZP:254779489776178507600:15:14是从00:15:14开始,并且每5秒打印一次,由此可知:
项目启动时间00:15:09(这对理解之后的initialDelay有用)
fixedRate:
上一次 启动时间点之后 X秒执行一次
同时我们可以看到<================delay :000:15:59count===============>和<================its0count===============>00:15:59都是从00:15:59开始的,也就是项目开始后的50秒之后,
由此可知:
fixedDelay:
上一次 结束时间点之后 每X秒执行一次
通过第二张图可以看到之后的<================delay :000:15:59count===============>是间隔6秒执行的,
由此可知:
initialDelay:
第一次延迟 X秒执行,之后按照fixedRate的规则每X秒执行

默认情况下,如果什么都不进行配置,就会导致一个问题,系统中所有的定时任务都是使用的一个线程去执行的,也就是说,如果如果同一个时刻有2个定时任务需要执行,那么只可能有一个定时任务在执行,如果要解决这个问题可以定义一个自定的任务调度线程池即可。
实现功能:
启动3个定时任务,每隔1s打印出一句话,观看是同一个线程打印的还是不同的线程打印的。
实现步骤:
1、在启动类上增加@EnableScheduling注解
2、配置一个类型为 TaskScheduler类型的bean (可以将这个类型的bean删除,看程序输出的结果)
3、编写一个任务类,每隔1s输出内容

首先编写启动类:

然后编写任务类:

执行结果:

如何理解 fixedRate 和 fixedDelay 的区别

fixedRate 任务两次执行时间间隔是任务的开始点,而 fixedDelay 的间隔是前次任务的结束与下次任务的开始。
大致用示意字符串来表示如下(每个 T1, 或 T2 代表任务执行秒数(每次任务执行时间不定),假定 fixedRate 或 fixedDelay 的值是 5 秒,用 W 表示等待的数)
fixedRate:
T1.T1WWWT2.T2.T2WW.T3.T3.T3.T3.T3.T4.T4.T4.T4.T4.T4.T4T5T5WWWT6.T6……..
fixedDelay:
T1.T1.WWWWW.T2.T2.T2WWWWW.T3.T3.T3.T3.T3.WWWWW.T4.T4.T4.T4.T4.T4.T4.WWWWWT6.T6……
一般来说能理解到上面两个场景已经差不多了,相比而言 fixedDelay 简单些,盯着上一次任务的屁股就行。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: