当前位置: 首页 > news >正文

Spring Boot 中的 @Scheduled 定时任务以及开关控制

Scheduled注解是Spring框架(包括Spring Boot)中用于实现定时任务的一种方式。以下是对Scheduled注解的详细解析:

一、基本概念

Scheduled注解允许开发者在Spring容器中定义定时任务。通过简单地在一个方法上添加Scheduled注解,Spring容器就会自动将这个方法配置为一个定时任务。这种方式不仅简化了定时任务的创建,还使得定时任务的管理变得更加灵活和可维护。

二、使用方式

Scheduled注解支持多种配置选项,包括执行计划、固定延迟、固定速率等。以下是一些常见的使用方式:

  1. 固定速率执行:使用fixedRate属性指定任务执行的固定速率(以毫秒为单位)。例如,@Scheduled(fixedRate=5000)表示任务将每5秒执行一次。
  2. 固定延迟执行:使用fixedDelay属性指定任务在上一次执行完成后等待的固定延迟时间(以毫秒为单位)。例如,@Scheduled(fixedDelay=5000)表示任务将在上一次执行完成后5秒再次执行。
  3. Cron表达式:使用cron属性指定一个cron表达式来定义任务的执行计划。Cron表达式是一个字符串,由6或7个空格隔开的域组成,每个域代表一个时间单位(秒、分、时、日、月、周、年,其中年可选)。例如,@Scheduled(cron="0 0 12 * * ?")表示任务将在每天的中午12点执行。

三、注意事项

  1. @EnableScheduling注解:要使Scheduled注解生效,需要在配置类上添加@EnableScheduling注解。这个注解会开启Spring的定时任务支持,并注册一个ScheduledAnnotationBeanPostProcessor实例来解析和处理带有Scheduled注解的方法。
  2. 线程池:在Spring Boot中,所有通过Scheduled注解定义的定时任务都会被放入一个公用的线程池中执行。默认情况下,该线程池的并发线程数为1,即所有的任务会使用同一个线程被依次执行。如果需要并行执行多个任务,可以通过配置spring.task.scheduling.pool.size属性来增加线程池的大小。
  3. 任务执行时间:如果任务执行时间超过间隔时间(对于fixedRate)或延迟时间(对于fixedDelay),Spring将尽可能地安排下一次执行。但是,这可能会导致任务的实际执行时间与预期有所偏差。因此,建议尽量保证任务能够在较短的时间内执行完毕。
  4. 异常处理:在实际部署时,需要考虑任务执行时的异常处理和日志记录。如果任务在执行过程中抛出异常,可能会影响后续任务的执行。因此,建议添加适当的异常处理逻辑来捕获和处理可能出现的异常。

四、示例代码

以下是一个使用Scheduled注解创建定时任务的示例代码:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class ScheduledTasks {@Scheduled(fixedRate = 5000)public void reportCurrentTime() {System.out.println("The current time is: " + new java.util.Date());}
}// 配置类
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();taskScheduler.setPoolSize(Runtime.getRuntime().availableProcessors() * 2 + 10); taskScheduler.initialize();taskRegistrar.setTaskScheduler(taskScheduler);}
}

在这个示例中,ScheduledTasks类中的reportCurrentTime方法被标记为一个定时任务,每5秒执行一次并打印当前时间。同时,在配置类SchedulingConfig上添加了@EnableScheduling注解来开启定时任务支持。

综上所述,Scheduled注解是Spring框架中用于实现定时任务的一种方便且强大的方式。通过合理配置和使用Scheduled注解,可以轻松地创建和管理各种定时任务以满足不同的业务需求。

五、开关控制定时任务

配置

jobs:corn:enable: truetestTask: "0 0/5 * * * ?"

定时任务

@ConditionalOnProperty(prefix = "jobs.corn", name = "enable", havingValue = "true")
@Component
@Slf4j
public class TestTask {@AutowiredTrainingJobService trainingJobService;@Scheduled(cron = "${jobs.corn.testTask:0/15 * * * * ?}")public void test() {log.info("TestTask test start");}}

相关文章:

Spring Boot 中的 @Scheduled 定时任务以及开关控制

Scheduled注解是Spring框架(包括Spring Boot)中用于实现定时任务的一种方式。以下是对Scheduled注解的详细解析: 一、基本概念 Scheduled注解允许开发者在Spring容器中定义定时任务。通过简单地在一个方法上添加Scheduled注解,S…...

服务器证书原理

CA(Certificate Authority)证书是由 证书颁发机构(CA)本身签名的。具体来说,这取决于 CA 的类型和其在信任链中的位置: 1. 自签名证书 根 CA 证书 是信任链的起点,由 CA 自己签名。它们是信任链…...

重温设计模式--代理、中介者、适配器模式的异同

文章目录 1、相同点2、不同点 1、相同点 目的都是为了更好地处理对象之间的关系:这三种模式都是在软件设计中用于处理对象之间的关联和交互,以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性&#xff0c…...

2024第十六届蓝桥杯模拟赛(第二期)-Python

# 2024第十六届蓝桥杯模拟赛&#xff08;第二期&#xff09;-Python题解 # 自己改注释# -----------------------1------------------------ # def prime(x): # if x < 2: # return 0 # for i in range(2, int(x ** 0.5) 1): # if x % i 0: # …...

分布式系统中的防抖策略一致性与性能优化

目录 引言分布式系统的挑战防抖策略简介确保多实例间一致性的方法 幂等操作TTL缓存 分布式一致性事件总线或消息队列异步任务调度器客户端或API网关层面的防抖一致性哈希与分区限流和熔断机制 避免锁竞争导致的性能瓶颈Java示例代码结论 引言 在现代软件架构中&#xff0c;…...

项目代码第6讲:UpdownController.cs;理解 工艺/工序 流程、机台信息;前端的“历史 警报/工艺 记录”

一、UpdownController.cs 1、前端传入 当用户在下图的“记录查询”中的 两个界面选项 中,点击“导出”功能时,向后端发起请求,请求服务器下载文件的权限 【权限是在Program.cs中检测的,这个控制器里只需要进行“谁在哪个接口下载了文件”的日志记录】 【导出:是用户把…...

【计算机视觉基础CV-图像分类】03-深度学习图像分类实战:鲜花数据集加载与预处理详解

本文将深入介绍鲜花分类数据集的加载与处理方式&#xff0c;同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向&#xff0c;为读者提供从数据组织、预处理、加载到可视化展示的完整过程&#xff0c;并为后续模型训练打下基础。 前言 在计算机视觉的深…...

大模型应用技术系列(一):大模型应用整体技术栈浅析

RAG相关的技术学习暂时告一段落了,接下来尝试探索新的学习方向。这就引入一个问题:接下来该做什么?为了能进一步推进,我需要有一个整体的视角,从更上层来看整个技术栈,从而确定接下来感兴趣的方向。本文主要探索从更上层的视角来看构建大模型的技术栈,从而进一步确定研究…...

绿色环保木塑复合材料自动化生产线设计书

《绿色环保木塑复合材料自动化生产线设计书》 一、项目概述 随着全球对环境保护和可持续发展的日益重视,绿色环保材料的研发与生产成为了热门领域。木塑复合材料作为一种新型的绿色环保材料,它将木材纤维与塑料通过特定工艺复合而成,兼具木材与塑料的双重特性,具有防水、…...

Sourcegraph 概述

Sourcegraph 报告 Sourcegraph 是一款强大的代码搜索和智能导航工具&#xff0c;专为大型代码库、分布式系统和跨多个仓库的开发环境设计。它能显著提高开发者对复杂系统的理解和维护效率&#xff0c;帮助团队在庞大的代码库中快速找到关键信息。本文将详细讲解 Sourcegraph 的…...

c 保存 csv格式的文件

在C语言中保存数据为CSV&#xff08;逗号分隔值&#xff09;格式的文件&#xff0c;你可以使用标准I/O库函数&#xff0c;如fprintf&#xff0c;来将数据写入文件&#xff0c;并确保每个字段之间用逗号分隔。以下是一个简单的示例&#xff0c;说明如何在C语言中创建一个CSV文件…...

C语言扫雷游戏教学(有图形界面)(提供源码+实验报告)(计时+排行榜+难度选择+登录注册+背景音乐)(涉及easyX库)

前言&#xff1a; 本篇文章篇幅较长&#xff0c;请根据自己的需求在目录上跳转对应内容哦&#xff01;源码及实验报告的获取在文章的后面哦&#xff01;本人代码水平不佳&#xff0c;希望本文章和项目能带给大家帮助&#xff01; 目录 前言&#xff1a; 一.成果预览&#x…...

第五节:GLM-4v-9b模型model加载源码解读(模型相关参数方法解读)

文章目录 前言一、GLM-4v-9b模型model加载源码解读1、GLM-4v-9b模型model加载主函数源码2、GLM-4v-9b模型model加载源码源码解读3、GLM-4v-9b自定义模型类源码解读 二、基于GLM-4v-9b模型获取模型输入参数等内容源码解读(from_pretrained-->huggingface)1、from_pretrained函…...

面试经验分享 | 北京渗透测试岗位

更多大厂面试经验的视频经验分享看主页 目录&#xff1a; 所面试的公司&#xff1a;安全大厂 所在城市&#xff1a;北京 面试职位&#xff1a;渗透测试工程师 面试方式&#xff1a;腾讯会议线上面试线下面试 面试过程&#xff1a; 面试官的问题&#xff1a; 1、说一下XSS有哪…...

unity Toggle制作滑动开关

先上效果图 重点是这个Graphic要清空,不然显示不能直接切换,会消失 using DG.Tweening; using UnityEngine; using UnityEngine.UI;public class SwitchToggle : MonoBehaviour {public RectTransform handleRect;public float duration 0.5f;private Vector2 handlePos;To…...

全面解析 Kubernetes 流量负载均衡:iptables 与 IPVS 模式

目录 Kubernetes 中 Service 的流量负载均衡模式 1. iptables 模式 工作原理 数据路径 优点 缺点 适用场景 2. IPVS 模式 工作原理 数据路径 优点 缺点 适用场景 两种模式的对比 如何切换模式 启用 IPVS 模式 验证模式 总结 Kubernetes 中 Service 的流量负载…...

【unity】【游戏开发】Unity项目一运行就蓝屏报Watch Dog Timeout

【背景】 由于是蓝屏所以没法截屏&#xff0c;总之今天遇到了一开Unity&#xff0c;过一阵就蓝屏的情况&#xff0c;报Watch Dog Timeout。 【分析】 通过任务管理器查看&#xff0c;发现Unity占用率100%&#xff0c;再观察Unity内部&#xff0c;每次右下角出现一个Global I…...

【macos java反编译工具Java Decompiler】

mac上能用的反编译工具 https://java-decompiler.github.io/...

宠物用品电子商务系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...

脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注

脑肿瘤检测数据集&#xff0c;对9900张原始图片进行YOLO&#xff0c;COCO&#xff0c;VOC格式的标注 数据集分割 训练组 70&#xff05; 6930图片 有效集 20&#xff05; 1980图片 测试集 10&#xff05; 990图片 预处理 静态裁剪&#xff1a; 24-82&…...

千问3.5-2B旅游行业落地:景点照片自动解说、多语种导览内容生成初探

千问3.5-2B旅游行业落地&#xff1a;景点照片自动解说、多语种导览内容生成初探 1. 旅游行业的技术痛点与解决方案 在旅游行业&#xff0c;景点解说和导览服务一直面临着几个核心挑战&#xff1a; 人工成本高&#xff1a;专业导游和翻译人员的人力成本持续攀升语言障碍&…...

别再只盯着Setup/Hold了!聊聊STA里Cell Delay和Net Delay那些‘反常’的负值现象

负延迟现象&#xff1a;STA中Cell Delay与Net Delay的深层解析 在数字集成电路设计中&#xff0c;静态时序分析&#xff08;STA&#xff09;是确保芯片功能正确性的关键环节。大多数工程师对Setup/Hold时间检查已经驾轻就熟&#xff0c;但当我们深入时序模型的细节时&#xff0…...

TS初相识

目录 前言&#xff1a; 关于TS 使用TS之前的环境搭配 TS的数据类型 number string null&undefined 根类型 数组类型 元组 函数类型 前言&#xff1a; js的缺点 错误出现的时机靠后 数据类型并不是连续的内存空间 js没有类型检测机制&#xff08;弱类型&#…...

第三十三课:LIF神经元模型与SpikingJelly实战解析

1. LIF神经元模型&#xff1a;从生物启发的数学原理说起 第一次看到LIF&#xff08;Leaky Integrate-and-Fire&#xff09;神经元时&#xff0c;我脑海中浮现的是中学物理课上那个总在漏电的电容器。这种神经元模型之所以被称为"漏电积分放电"&#xff0c;正是因为它…...

IC670PBI001总线接口单元

IC670PBI001 是 GE Fanuc Field Control 系列中的一款 Profibus 总线接口单元&#xff08;BIU&#xff09;&#xff0c;主要用于连接PLC与远程I/O模块&#xff0c;实现数据通信与系统控制&#xff0c;是分布式I/O系统中的核心组件。1、作为系统核心接口单元&#xff0c;实现PLC…...

AllWize库:面向Wize协议的LoRa射频嵌入式驱动开发指南

1. AllWize库概述&#xff1a;面向Wize协议的嵌入式无线通信底层实现 AllWize是一个专为Wize协议设计的Arduino兼容C库&#xff0c;核心目标是为RC1701HP系列射频模块提供轻量、可靠、跨平台的硬件抽象层。该库并非通用无线协议栈&#xff0c;而是深度绑定于RadioCrafts公司推…...

Agent学习--LLM--推理熵

平时我们用大模型的时候&#xff0c;可以看到虽然最后出来的是一大段话&#xff0c;但是实际上一般都是采用的是流式输出&#xff0c;即一个字一个字的输出出来&#xff0c;而这每个字的生成&#xff0c;本质是agent在不断地推理下一个字或者词是什么&#xff0c;当它遇到关键决…...

解决重装系统后 BitLocker 分区每次重启需手动解锁的问题

解决重装系统后 BitLocker 分区每次重启需手动解锁的问题 问题现象原因分析找回 48 位 BitLocker 恢复密钥永久解决&#xff1a;启用自动解锁&#xff08;避免每次重启输入&#xff09; 电脑版本win11&#xff0c;更新后遇到设置和驱动消失的问题&#xff0c;不得不重装系统。重…...

RT-Thread系统时钟深度解析:从SysTick到rt_hw_us_delay的底层实现与优化技巧

RT-Thread系统时钟深度解析&#xff1a;从SysTick到rt_hw_us_delay的底层实现与优化技巧 在嵌入式实时操作系统中&#xff0c;精确的时间管理是确保系统实时性的关键。RT-Thread作为一款开源的实时操作系统&#xff0c;其时钟系统设计精巧而高效。本文将深入剖析RT-Thread 4.0.…...

Keyence VT5 HMI嵌入式通信库:RS232协议栈实现

1. KeyenceHMI_Lib 库深度解析&#xff1a;面向工业现场的 RS232 HMI 通信协议栈实现1.1 工程定位与核心价值KeyenceHMI_Lib 是一个专为嵌入式平台&#xff08;特别是 Arduino 生态&#xff09;设计的轻量级通信库&#xff0c;其核心目标是在资源受限的微控制器上&#xff0c;可…...