java spring boot 定时任务

embedded/2025/3/31 4:03:35/
java">@Scheduled(cron = "0 0 0 * * ?")@SchedulerLock(name = "ProImpl.sendUserMsg", lockAtMostFor = "PT10M", lockAtLeastFor = "PT1M")public void sendUserMsg() {}

这段代码是 Spring Boot 中的 定时任务,结合 ShedLock 进行分布式任务调度,用于在多个实例中防止任务的并发执行。

### 代码解析

java
@Scheduled(cron = "0 0 0 * *  ?")

 @Scheduled 注解用于定时执行方法。
 cron = "0 0 0   ?" 代表 每天午夜 00:00 执行(秒 分 时 日 月 星期)。
   0 0 0   ?:
     秒:0
     分钟:0
     小时:0
     日:(每天)
     月:(每月)
     星期:?(不指定)

java
@SchedulerLock(
    name = "CustomerActivityInfoServiceImpl.updateActivityBusinessStatus",
    lockAtMostFor = "PT10M",
    lockAtLeastFor = "PT1M"
)

 @SchedulerLock 是 ShedLock 提供的分布式锁,用于防止多个实例同时执行该定时任务。
 参数解析:
   name = "CustomerActivityInfoServiceImpl.updateActivityBusinessStatus"  
     任务的唯一标识符(锁的名称)。
   lockAtMostFor = "PT10M"  
     最多锁定 10 分钟,如果方法执行时间超过 10 分钟,锁会自动释放,避免死锁。
   lockAtLeastFor = "PT1M"  
     至少锁定 1 分钟,即使任务执行时间小于 1 分钟,也不会立即释放锁,防止频繁触发。

java
public void updateActivityBusinessStatus() {

 这是定时任务执行的方法,具体逻辑会在这个方法里实现,比如更新数据库、调用 API 等。

### 总结
这段代码的作用:
1. 每天午夜(00:00)执行 updateActivityBusinessStatus() 方法。
2. 防止多个实例同时执行(使用 ShedLock 分布式锁)。
3. 锁定规则:
    最多锁定 10 分钟(避免任务执行时间过长)。
    至少锁定 1 分钟(避免任务重复执行)。

📌 适用场景:  
在 微服务集群 或 多实例部署 时,确保定时任务只在一个实例上运行,防止数据冲突或重复执行。

java"> 特殊情况
1. 应用未启动:如果服务器宕机或应用未启动,定时任务不会执行,可能需要手动触发或使用补偿机制(如 MQ 或数据库任务表)。
2. 集群环境:多个实例运行时,@SchedulerLock(ShedLock)确保只有一个实例执行任务。
3. Spring 任务调度需启用:需要在 Spring Boot 主类 或 配置类 中加上 @EnableScheduling:java@SpringBootApplication@EnableSchedulingpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}如果 @EnableScheduling 没有加,@Scheduled 不会生效。总结
✅ 不需要额外触发,Spring 会自动调度。  
✅ 确保 @EnableScheduling 开启,否则 @Scheduled 不生效。  
✅ 集群部署时,ShedLock 确保任务只执行一次,不会多个实例同时触发。


http://www.ppmy.cn/embedded/177291.html

相关文章

锐捷EWEB路由器 timeout.php任意文件上传漏洞(DVB-2025-9003)

免责声明 仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 一:产品介绍 锐捷EWEB路由器是锐…

HTTP 状态码解析

在浩瀚无垠的互联网海洋中,我们每天都在通过浏览器访问各种网站,获取海量的信息。然而,你是否曾想过,在这看似简单的网页请求背后,隐藏着一套复杂而精妙的通信机制?HTTP 状态码,就是这个机制中不…

DeepSeek-V3-0324 模型发布:开源 AI 性能再攀高峰,推理与编码能力逼近顶级闭源模型

2025 年 3 月 24 日,国内 AI 公司深度求索(DeepSeek)悄然推出 V3 模型的升级版本 DeepSeek-V3-0324。尽管此次更新并非市场期待的 V4 或 R2 版本,但其在推理速度、编码能力、数学推理及开源生态上的突破,仍迅速引发全球…

Selenium之简介

Selenium简介 首先,让我们看看官网是怎么定义的 Selenium是一个支持web浏览器自动化的一系列工具和库的综合项目,提供了扩展来模拟用户和浏览器的交互,用于扩展浏览器分配的分发服务器;用于W3C WebDriver规范的基础架构 其实&a…

python 模拟登录

在Python中模拟登录通常涉及到发送HTTP请求到服务器,并处理响应。这可以通过多种方式实现,最常见的方法之一是使用requests库。下面是一个简单的示例,展示了如何使用requests库来模拟登录一个网站(以一个假想的登录表单为例&#…

CSS3学习教程,从入门到精通,CSS3 布局语法知识点及案例代码(15)

CSS3 布局知识点及案例代码 一、盒模型 知识点 CSS 盒模型是理解 CSS 布局的基础,它包括内容(content)、内边距(padding)、边框(border)和外边距(margin)四个部分。 …

算法及数据结构系列 - 树

系列文章目录 算法及数据结构系列 - 二分查找 算法及数据结构系列 - BFS算法 算法及数据结构系列 - 动态规划 算法及数据结构系列 - 双指针 算法及数据结构系列 - 回溯算法 文章目录 树框架树遍历框架N叉树遍历框架 经典题型124.二叉树的最大路径和105.从前序与中序遍历序列构造…

Headless Chrome 优化:减少内存占用与提速技巧

在当今数据驱动的时代,爬虫技术在各行各业扮演着重要角色。传统的爬虫方法往往因为界面渲染和资源消耗过高而无法满足大规模数据采集的需求。本文将深度剖析 Headless Chrome 的优化方案,重点探讨如何利用代理 IP、Cookie 和 User-Agent 设置实现内存占用…