Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

lukas-krecan/ShedLock

说明与用途

**项目简介(2‑3 句)**
ShedLock 是一个基于分布式锁的库,帮助在多实例部署的环境中确保 **Spring、Quartz、Micronaut 等框架的定时任务只会被单个实例执行**,从而避免重复执行和资源竞争。

**价值**

  • **防止任务重复**:在 Kubernetes、Docker Swarm、云服务器等水平扩展的场景下,自动为同一调度任务加锁,保证业务逻辑只跑一次。
  • **实现简单**:只需在已有的 @Scheduled(或对应框架)方法上加上 @SchedulerLock 注解,底层通过 JDBC、MongoDB、Redis、Zookeeper 等持久化介质实现锁的获取与释放。
  • **兼容性强**:支持 Java 8+,可与 Spring Boot、Spring Cloud、Micronaut、Quarkus 等主流生态无缝集成。

**典型接入方式**

  1. **引入依赖**(以 Spring Boot 为例)
   <dependency>
       <groupId>net.javacrumbs.shedlock</groupId>
       <artifactId>shedlock-spring</artifactId>
       <version>5.10.0</version>
   </dependency>
   <dependency>
       <groupId>net.javacrumbs.shedlock</groupId>
       <artifactId>shedlock-provider-jdbc-template</artifactId>
       <version>5.10.0</version>
   </dependency>
  1. **配置锁存储**(以数据库为例)
   spring.datasource.url=jdbc:postgresql://host/db
   spring.datasource.username=...
   spring.datasource.password=...

并在 @Configuration 中声明 LockProvider:

   @Bean
   public LockProvider lockProvider(DataSource dataSource) {
       return new JdbcTemplateLockProvider(dataSource);
   }
  1. **为任务加锁**
   @Scheduled(cron = "0 */5 * * * *")
   @SchedulerLock(name = "myTask", lockAtMostFor = "PT4M", lockAtLeastFor = "PT1M")
   public void myTask() {
       // 业务代码
   }

**生产可用性**

  • **成熟度**:已有 4 k+ stars、500+ forks,社区活跃,最近一次提交在 2026‑05‑14,表明仍在维护。
  • **适用场景**:适合内部系统、原型或对任务唯一性有强需求的生产环境(如报表生成、批量同步、限流任务等)。
  • **风险与注意点**:
  • 需要自行选择并部署锁的持久化介质(数据库、Redis、MongoDB 等),确保其高可用性。
  • 对锁的超时(lockAtMostFor)和最短持有时间(lockAtLeastFor)要根据业务容忍度进行调优,防止因锁未及时释放导致任务“卡死”。
  • 在极高并发或跨语言系统中,需评估锁实现的性能和一致性模型(如 Redis 的单节点 vs 集群)。

总体而言,ShedLock 在保证分布式调度任务唯一执行方面提供了 **轻量、易集成且经过社区验证的解决方案**,只要做好存储层的可靠性和锁超时策略,就可以在生产环境中安全使用。

实际用途

lukas-krecan/ShedLock may be useful when its README and activity match a concrete workflow.

限制与审查说明

Medium: useful for prototypes or internal workflows, with dependency and maintenance checks before production.

  • 来源: github
  • 语言: Java
  • 记录日期: 2026-09-05T17:31:33.812Z
原始来源