全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Spring Boot 定时任务的实现方法

最近在用SpringBoot写一个关于定时项目的时候遇到一个问题,就是客户端访问服务器的结果实际上是每个一段时间发生一次变化,并且在服务器在每天的某个固定的时间点都要触发一次事件。

我们当然可以在遇到每一个请求时都重新计算结果,但是为了提高效率,我们显然可以让服务器每隔一段时间计算一次结果,并且把这个结果进行保存,对在下一个时间段内的每个请求都直接返回计算后的结果。这样就能较好的提高了服务器的性能。

那么问题就在于如何处理定时任务。其实SpringBoot早就提供了非常方便的接口,但是网上的介绍还是有点乱的,我就记录下具体操作的注意点方便以后查找。

创建定时服务

一般来说定时服务会写在一个Component里,方便管理。对于定时任务,我们其实只要在需要定时执行的函数前加上 @Scheduled 注解,比如下面这样:

@Component
public class ScheduledTask{
  @Scheduled(fixedRate = 5000)
  public void scheduledTask(){
    //do sth...
  }
}

与此同时,我们还要在项目的启动文件里配置上 @EnableScheduling 注解,告诉项目我们是支持定时任务的:

@SpringBootApplication
@EnableScheduling
public class LotteryApplication{
 public static void main(String[] args){
 SpringApplication.run(LotteryApplication.class, args);
 }
}

这样我们的函数就能定时执行了。

Scheduled参数

Scheduled主要支持 fixRate , fixDelay , cron , initialDelay 这些参数,下面做简要说明。

fixRate和fixDelay

fixRate和fixDelay参数都指定了函数每隔某个毫秒数执行一次,但是他们之间也有细小的差别。

fixRate

fixRate的计时是相对于系统时间的,也就是一定相隔会固定时间执行。

fixDelay

fixDelay的计时是相对于上一次调用的时间的,因此他受其他程序调用的影响,如果该函数在其他地方被手动调用,那么这个计时器就会重新计时。

initialDelay参数

initialDelay参数是个额外参数,比较简单,就是指定从项目开始运行到该函数首次被调用的执行时间,以毫秒计。

如果不指定这个参数,这个值就是-1,也就是程序开始时不执行。

在不知到initialDelay这个参数的时候为了让程序启动时立即调用该函数,我让这个定时类继承了 InitializingBean 并在重写的 afterPropertiesSet 方法中手动调用了这个函数。。。现在看起来还真是愚蠢。。。

cron

这个Cron是最复杂也是高度自定义化的定时工具,在Linux系统里也有类似的crontab命令。他其实是更加细致的定义了定时任务,以一个字符串的形式进行表示。

在SpringBoot中,一个cron字符串是由六个部分以空格组成的字符串,文档中的例子是这样的:

"0 0 * * * *" = the top of every hour of every day.
"*/10 * * * * *" = every ten seconds.
"0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
"0 0 6,19 * * *" = 6:00 AM and 7:00 PM every day.
"0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day.
"0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
"0 0 0 25 12 ?" = every Christmas Day at midnight

六个部分分别表示秒、分、时、日、月、周。

他支持'-‘表示范围,'*'表示通配,'/‘表示在左边的时间匹配后间隔右边的时间,'?'一般表示周的通配。

具体的使用方法还要参考相关文档。

网上有很多类似 Cron表达式测试工具 这样的测试工具,方便我们测试自己写的Cron表达式。

下面一个例子表示每隔五分钟执行一次:

@Scheduled(cron = "0 0/5 * * * ?")
public void fiveMinutes(){
  //do sth.
}

注意点

在实际使用Scheduled注解时,我们一定要指定且仅仅指定fixRate、fixDelay、cron当中的一个,否则肯定会导致错误。当然,我们可以任意指定initialDelay参数。

以上所述是小编给大家介绍的Spring Boot 定时任务的实现方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!


# spring  # boot  # 定时任务  # 详解SpringBoot 创建定时任务(配合数据库动态执行)  # SpringBoot 定时任务遇到的坑  # springboot如何配置定时任务  # springBoot 创建定时任务过程详解  # 详解Spring Boot 中实现定时任务的两种方式  # 详解SpringBoot定时任务说明  # Springboot实现定时任务的4种方式举例详解  # 每隔  # 也有  # 就能  # 相对于  # 小编  # 测试工具  # 我就  # 就会  # 是个  # 文档  # 都要  # 首次  # 有很多  # 是这样  # 是由  # 网上  # 计时器  # 执行时间  # 并在  # 要在 


相关文章: 如何在IIS中新建站点并配置端口与IP地址?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  官网网站制作腾讯审核要多久,联想路由器newifi官网  php json中文编码为null的解决办法  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  韩国服务器如何优化跨境访问实现高效连接?  建站之星北京办公室:智能建站系统与小程序生成方案解析  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  如何快速上传建站程序避免常见错误?  定制建站如何定义?其核心优势是什么?  如何解决VPS建站LNMP环境配置常见问题?  建站主机选购指南与交易推荐:核心配置解析  常州自助建站工具推荐:低成本搭建与模板选择技巧  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  音乐网站服务器如何优化API响应速度?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  香港服务器WordPress建站指南:SEO优化与高效部署策略  深入理解Android中的xmlns:tools属性  如何获取免费开源的自助建站系统源码?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  如何在搬瓦工VPS快速搭建网站?  如何登录建站主机?访问步骤全解析  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  长沙企业网站制作哪家好,长沙水业集团官方网站?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  网站制作公司排行榜,抖音怎样做个人官方网站  头像制作网站在线制作软件,dw网页背景图像怎么设置?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  如何用wdcp快速搭建高效网站?  建站10G流量真的够用吗?如何应对访问高峰?  c++ stringstream用法详解_c++字符串与数字转换利器  高防服务器租用如何选择配置与防御等级?  建站三合一如何选?哪家性价比更高?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何通过智能用户系统一键生成高效建站方案?  红河网站制作公司,红河事业单位身份证如何上传?  教程网站设计制作软件,怎么创建自己的一个网站?  如何选择高性价比服务器搭建个人网站?  如何访问已购建站主机并解决登录问题?  如何在Tomcat中配置并部署网站项目?  如何设置并定期更换建站之星安全管理员密码?  c++怎么用jemalloc c++替换默认内存分配器【性能】  网站制作新手教程,新手建设一个网站需要注意些什么? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。