热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

详解SpringBoot定时任务的实现方法

最近在用SpringBoot写一个关于定时项目的时候遇到一个问题,下面小编把如何处理定时任务的解决思路分享给大家,需要的朋友参考下

最近在用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 定时任务的实现方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!


推荐阅读
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 创建第一个 MUI 移动应用项目
    本文将详细介绍如何使用 HBuilder 创建并运行一个基于 MUI 框架的移动应用项目。我们将逐步引导您完成项目的搭建、代码编写以及真机调试,帮助您快速入门移动应用开发。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 掌握Linux:基础命令入门
    本章节深入浅出地介绍了Linux系统中的基本命令操作,帮助读者快速上手并理解其核心功能。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
author-avatar
dmcm0005
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有