Spring Boot 整合 ShedLock 处理定时任务重复

SpringBoot整合ShedLock处理定时任务重复问题⏰🔒

在分布式系统中,定时任务重复执行是一个常见问题😫。当多个服务实例同时运行时,每个实例上的定时任务可能会同时触发,导致数据不一致或重复处理。今天我们就来聊聊如何使用ShedLock解决这个问题!✨

什么是ShedLock?🤔

ShedLock是一个轻量级的分布式锁库,确保你的定时任务在同一时间只在一个实例上执行🚀。它支持多种存储方式,包括JDBC、Redis、MongoDB等。

整合步骤🛠️

1.首先添加依赖:

```xml

net.javacrumbs.shedlock
shedlock-spring
4.42.0

net.javacrumbs.shedlock
shedlock-provider-jdbc-template
4.42.0

```

2.创建数据库表(以MySQL为例):

```sql
CREATETABLEshedlock(
nameVARCHAR(64)NOTNULL,
lock_untilTIMESTAMP(3)NOTNULL,
locked_atTIMESTAMP(3)NOTNULL,
locked_byVARCHAR(255)NOTNULL,
PRIMARYKEY(name)
);
```

3.配置ShedLock:

```java
@Configuration
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor="PT30S")
publicclassSchedulerConfig{

@Bean
publicLockProviderlockProvider(DataSourcedataSource){
returnnewJdbcTemplateLockProvider(dataSource);
}
}
```

4.使用@SchedulerLock注解定时任务:

```java
@Service
publicclassScheduledTaskService{

@Scheduled(cron="0/5")//每5分钟执行一次
@SchedulerLock(name="scheduledTaskName",
lockAtLeastFor="PT5M",
lockAtMostFor="PT10M")
publicvoidscheduledTask(){
//你的业务逻辑
System.out.println("任务执行时间:"+newDate());
}
}
```

关键参数说明📝

-`name`:锁的唯一名称,相同名称的任务会被互斥
-`lockAtLeastFor`:最短锁定时间,防止任务执行过快导致重复
-`lockAtMostFor`:最大锁定时间,防止节点崩溃导致锁无法释放

总结🎯

通过ShedLock,我们轻松解决了分布式环境下的定时任务重复执行问题💪。它配置简单、支持多种存储方式,是处理分布式定时任务的绝佳选择!下次遇到类似问题,不妨试试ShedLock吧!😊

相关推荐
heartbeat..2 分钟前
深入理解 JVM:从核心原理到实战应用
java·jvm·jdk·学习笔记
独自破碎E4 分钟前
数组列表中的最大距离
java
猿小羽6 分钟前
基于 Spring AI 与 Streamable HTTP 构建 MCP Server 实践
java·llm·spring ai·mcp·streamable http
大模型微调Online8 分钟前
深度复盘:Qwen3-4B-Instruct-2507微调实战——打造“快思考、强执行”的 ReAct IoT Agent
java·后端·struts
铁蛋AI编程实战10 分钟前
Agentic AI/GPT-4o替代/Spring AI 2.0/国产大模型轻量化
java·人工智能·spring
weixin_7042660511 分钟前
Maven入门:构建与依赖管理全解析
java·maven
cyforkk12 分钟前
14、Java 基础硬核复习:数据结构与集合源码的核心逻辑与面试考点
java·数据结构·面试
零度@15 分钟前
专为 Java 开发者 整理的《Python编程:从入门到实践》前8章核心内容
java·开发语言·windows·python
一嘴一个橘子17 分钟前
idea Could not autowire. No beans of ‘xxxMapper‘ type found
java
海边的Kurisu18 分钟前
苍穹外卖日记 | Day9 用户端历史订单模块、商家端订单管理模块、用户下单功能优化
java·苍穹外卖