Spring 定时任务:@Scheduled 注解四大参数解析

本文主要介绍了在 Spring 框架中使用@Scheduled注解实现定时任务的方法,重点讲解了fixedRate、fixedDelay、cron和initialDelay这四个参数的用法,并通过实例代码进行了详细说明。
在这里插入图片描述

1. fixedRate 参数

参数含义

fixedRate指定任务固定时间间隔执行。如设为 3000 毫秒(3 秒),第一次任务启动后,后续任务每隔 3 秒尝试启动,不考虑前次任务是否完成。

示例代码

创建一个简单的 Spring Boot 项目,并在主类上添加@SpringBootApplication注解以启用 Spring Boot 自动配置。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication
@EnableScheduling // 启用定时任务功能
public class ScheduledDemoApplication {public static void main(String[] args) {SpringApplication.run(ScheduledDemoApplication.class, args);}
}

创建一个定时任务类,doTask方法被@Scheduled注解修饰,fixedRate设置为 3000 毫秒。在方法内部,我们首先打印出执行次数和当前时间,然后通过Thread.sleep模拟任务执行耗时 5 秒。运行应用程序后,你会发现尽管任务执行时间超过了 3 秒,但每隔 3 秒就会有一次新的任务尝试启动,导致任务会重叠执行。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class FixedRateTask {private int count = 0;@Scheduled(fixedRate = 3000)public void doTask() {System.out.println("FixedRateTask - 执行次数: " + (++count) + ",当前时间: " + System.currentTimeMillis());try {// 模拟任务执行耗时 5 秒Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}}
}

2. fixedDelay 参数

参数含义

fixedRate不同,fixedDelay参数关注的是上一次任务执行完成后的延迟时间。也就是说,只有当上一次任务彻底结束后,才会开始计算固定的延迟时间,之后才启动下一次任务。例如,设置fixedDelay = 3000毫秒,那么在上一次任务完成后,会等待 3 秒才开始下一次任务。

示例代码

创建一个FixedDelayTask类,doTask方法的fixedDelay设置为 3000 毫秒,任务模拟执行耗时 2 秒。运行后可以看到,每次任务执行完成后,会等待 3 秒才开始下一次任务,任务不会重叠执行。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class FixedDelayTask {private int count = 0;@Scheduled(fixedDelay = 3000)public void doTask() {System.out.println("FixedDelayTask - 执行次数: " + (++count) + ",当前时间: " + System.currentTimeMillis());try {// 模拟任务执行耗时 2 秒Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}
}

3. cron 参数

参数含义

cron参数提供了一种高度灵活的定时任务执行时间设置方式。它基于 cron 表达式,该表达式由 6 个或 7 个字段组成,分别对应秒、分钟、小时、日、月、星期(星期可以用数字 0 - 6 表示,其中 0 或 7 代表星期日)以及可选的年。通过合理组合这些字段的值,可以精确地定义任务在何时执行。

示例代码

创建一个CronTask类,cron表达式"0 0/5 * * * *"表示每隔 5 分钟执行一次任务。例如,任务可能在 10:00:00、10:05:00、10:10:00 等时间点执行。:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class CronTask {@Scheduled(cron = "0 0/5 * * * *")public void doTask() {System.out.println("CronTask - 执行时间: " + System.currentTimeMillis());}
}

4. initialDelay 参数

参数含义

initialDelay参数用于指定定时任务在应用启动后首次执行的延迟时间。它可以与fixedRatefixedDelaycron等参数结合使用,以便在应用启动后等待一段时间再开始执行定时任务。

示例代码

创建一个InitialDelayTask类,、fixedRate设置为 3000 毫秒,initialDelay设置为 5000 毫秒。这意味着应用启动后,会先等待 5 秒,然后才开始按照每 3 秒的固定间隔执行任务。

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class InitialDelayTask {private int count = 0;@Scheduled(fixedRate = 3000, initialDelay = 5000)public void doTask() {System.out.println("InitialDelayTask - 执行次数: " + (++count) + ",当前时间: " + System.currentTimeMillis());}
}

5. 总结

  • 对于一些对实时性要求较高且执行时间较短的任务,可以考虑使用fixedRate
  • 对于执行时间较长且不希望任务重叠的任务,fixedDelay可能更为合适;
  • 对于需要在特定时间点或按照复杂时间规则执行的任务,cron表达式则是不二之选。
  • initialDelay参数可以帮助我们更好地控制任务的启动时间,避免在应用启动初期因大量任务同时启动而带来的性能压力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/7138.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刷题总结 回溯算法

为了方便复习并且在把算法忘掉的时候能尽量快速的捡起来 刷完回溯算法这里需要做个总结 回溯算法的适用范围 回溯算法是深度优先搜索(DFS)的一种特定应用,在DFS的基础上引入了约束检查和回退机制。 相比于普通的DFS,回溯法的优…

【MySQL】我在广州学Mysql 系列——MySQL用户管理详解

ℹ️大家好,我是练小杰,本博客是春节前最后一篇了,在此感谢大佬们今年的支持!!🙏🙏 接下来将学习MYSQL用户管理的相关概念以及命令~~ 回顾:👉【MYSQL触发器的使用】 数据…

网络编程-网络原理HTTP1

文章目录 HTTP请求/响应的基本结构认识URLURL是什么和基本格式关于encoding机制 认识方法(method)GET方法简介GET方法的特点POST方法简介POST方法的特点GET和POST的区别(经典面试题)关于GET和POST的补充说明Restful风格 上节主要是对http协议的一些最基本的概念做出一些说明, 然…

概率密度函数(PDF)分布函数(CDF)——直方图累积直方图——直方图规定化的数学基础

对于连续型随机变量,分布函数(Cumulative Distribution Function, CDF)是概率密度函数(Probability Density Function, PDF)的变上限积分,概率密度函数是分布函数的导函数。 如果我们有一个连续型随机变量…

[Python学习日记-79] socket 开发中的粘包现象(解决模拟 SSH 远程执行命令代码中的粘包问题)

[Python学习日记-79] socket 开发中的粘包现象(解决模拟 SSH 远程执行命令代码中的粘包问题) 简介 粘包问题底层原理分析 粘包问题的解决 简介 在Python学习日记-78我们留下了两个问题,一个是服务器端 send() 中使用加号的问题&#xff0c…

【落羽的落羽 数据结构篇】算法复杂度

文章目录 一、数据结构和算法简介二、算法复杂度1. 时间复杂度2. 空间复杂度 一、数据结构和算法简介 数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用,所以我们要学…

22_解析XML配置文件_List列表

解析XML文件 需要先 1.【加载XML文件】 而 【加载XML】文件有两种方式 【第一种 —— 使用Unity资源系统加载文件】 TextAsset xml Resources.Load<TextAsset>(filePath); XmlDocument doc new XmlDocument(); doc.LoadXml(xml.text); 【第二种 —— 在C#文件IO…

第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

第十五届的题目在规定时间内做出了前5道&#xff0c;还有2道找时间再磨一磨。现在把做的一些思路总结如下&#xff1a; 题1&#xff1a;握手问题 问题描述 小蓝组织了一场算法交流会议&#xff0c;总共有 50人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例…

联想电脑怎么设置u盘启动_联想电脑设置u盘启动方法(支持新旧机型)

有很多网友问联想电脑怎么设置u盘启动&#xff0c;联想电脑设置u盘启动的方法有两种&#xff0c;一是通过bios进行设置。二是通过快捷方式启动进入u盘启动。但需要注意有两种引导模式是&#xff0c;一种是uefi引导&#xff0c;一种是传统的leacy引导&#xff0c;所以需要注意制…

GitHub Actions 使用需谨慎:深度剖析其痛点与替代方案

在持续集成与持续部署&#xff08;CI/CD&#xff09;领域&#xff0c;GitHub Actions 曾是众多开发者的热门选择&#xff0c;但如今&#xff0c;其弊端逐渐显现&#xff0c;让不少人在使用前不得不深思熟虑。 团队由大约 15 名工程师组成&#xff0c;采用基于主干的开发方式&am…

Leetcode-两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

MySQL安装教程

一、下载 点开下面的链接&#xff1a;下载地址 点击Download 就可以下载对应的安装包了, 安装包如下: 二、解压 下载完成后我们得到的是一个压缩包&#xff0c;将其解压&#xff0c;我们就可以得到MySQL 8.0.34 的软件本体了(就是一个文件夹)&#xff0c;我们可以把它放在你想…

BGP分解实验·11——路由聚合与条件性通告(3)

续接上&#xff08;2&#xff09;的实验。其拓扑如下&#xff1a; 路由聚合的负向也就是拆分&#xff0c;在有双出口的情况下&#xff0c;在多出口做流量分担是优选方法之一。 BGP可以根据指定来源而聚合路由&#xff0c;在产生该聚合路由的范围内的条目注入到本地BGP表后再向…

INCOSE需求编写指南-第1部分:介绍

第1部分&#xff1a;介绍Section 1: Introduction 1.1 目的和范围 Purpose and Scope 本指南专门介绍如何在系统工程背景下以文本形式表达需求和要求陈述。其目的是将现有标准&#xff08;如 ISO/IEC/IEEE 29148&#xff09;中的建议以及作者、主要贡献者和审稿员的最佳实践结…

基于神经网络的视频编码NNVC(1):帧内预测

在H.266/VVC发布后&#xff0c;基于传统编码框架提升压缩率越来越难&#xff0c;随着深度学习的发展&#xff0c;研究人员开始尝试将神经网络引入编码器。为此&#xff0c;JVET工作组在2020年成立AHG11小组来专门进行基于神经网络的视频编码的研究。 为了方便研究&#xff0c;工…

深入探究分布式日志系统 Graylog:架构、部署与优化

文章目录 一、Graylog简介二、Graylog原理架构三、日志系统对比四、Graylog部署传统部署MongoDB部署OS或者ES部署Garylog部署容器化部署 五、配置详情六、优化网络和 REST APIMongoDB 七、升级八、监控九、常见问题及处理 一、Graylog简介 Graylog是一个简单易用、功能较全面的…

寒假1.23

题解 web&#xff1a;[极客大挑战 2019]Secret File&#xff08;文件包含漏洞&#xff09; 打开链接是一个普通的文字界面 查看一下源代码 发现一个链接&#xff0c;点进去看看 再点一次看看&#xff0c;没什么用 仔细看&#xff0c;有一个问题&#xff0c;当点击./action.ph…

ORB-SLAM2源码学习:Initializer.cc⑧: Initializer::CheckRT检验三角化结果

前言 ORB-SLAM2源码学习&#xff1a;Initializer.cc⑦: Initializer::Triangulate特征点对的三角化_cv::svd::compute-CSDN博客 经过上面的三角化我们成功得到了三维点&#xff0c;但是经过三角化成功的三维点并不一定是有效的&#xff0c;需要筛选才能作为初始化地图点。 …

微信小程序1.1 微信小程序介绍

1.1 微信小程序介绍 内容提要 1.1 什么是微信小程序 1.2 微信小程序的功能 1.3 微信小程序使用场景 1.4 微信小程序能取代App吗 1.5 微信小程序的发展历程 1.6微信小程序带来的机会

STM32 GPIO配置 点亮LED灯

本次是基于STM32F407ZET6做一个GPIO配置&#xff0c;实现点灯实验。 新建文件 LED.c、LED.h文件&#xff0c;将其封装到Driver文件中。 双击Driver文件将LED.c添加进来 编写头文件&#xff0c;这里注意需要将Driver头文件声明一下。 在LED.c、main.c里面引入头文件LED.h LED初…