在分布式系统里,多个服务实例对同一个资源(比如订单、库存、用户余额)进行并发访问时,很容易出现 数据不一致、重复处理等问题。
这时我们就需要 分布式锁 来控制访问顺序,确保同一时刻只有一个线程/服务在处理关键业务。
今天给大家推荐一个简洁、易用、基于 Spring Boot 的分布式锁 Starter ——
✨ distributed-lock-spring-boot-starter。
👉 项目地址:
github.com/ChildrenGre…
👉 使用demo:
github.com/ChildrenGre…
一、Starter 是什么?能为你解决什么
distributed-lock-spring-boot-starter 是一个开源的 Spring Boot Starter 插件,提供了注解驱动的分布式锁能力。
核心价值
- ✅ 最小侵入:只需在方法上加注解,不改业务代码结构
- ✅ 多种后端支持:Redisson、ZooKeeper(Curator)、etcd(jetcd)
- ✅ 多种锁类型:可重入锁、公平锁、读写锁等
- ✅ SpEL 动态 key:灵活定义锁粒度
- ✅ Spring Boot 自动配置:开箱即用
- ✅ Apache-2.0 许可证:放心商用
二、核心功能亮点
1️⃣ 注解驱动,一行搞定分布式锁
@DistributedLock(
key = "#orderId",
prefix = "order",
waitTime = 3, // 最长等待时间(秒)
leaseTime = 10, // 锁持有时间(秒)
lockType = LockType.FAIR
)
public void process(String orderId) {
// 核心业务逻辑
}
说明:
key支持 SpEL 表达式- 锁 key 支持统一前缀,避免冲突
- 支持公平锁 / 可重入锁 / 读写锁
- 自动选择已注册的锁实现
2️⃣ 多种后端支持,适配你的基础设施
| 后端实现 | 典型用途 |
|---|---|
| Redisson(Redis) | 性能高,业务锁首选 |
| ZooKeeper(Curator) | 强一致协调场景 |
| etcd(jetcd) | 云原生、控制面 |
Starter 会根据 classpath 自动识别可用的锁后端。
3️⃣ 灵活的锁类型支持
| 锁类型 | 适用场景 |
|---|---|
REENTRANT | 普通业务互斥 |
FAIR | 防止线程饥饿 |
READ / WRITE | 读多写少场景 |
三、如何使用?三步即可上手
1️⃣ 引入依赖
<dependency>
<groupId>com.childrengreens</groupId>
<artifactId>distributed-lock-spring-boot-starter</artifactId>
<version>${latest-version}</version>
</dependency>
并根据需要引入 Redisson / Curator / jetcd 客户端依赖。
2️⃣ 基础配置示例(以 Redis + Redisson 为例)
spring:
redis:
host: 127.0.0.1
port: 6379
distributed:
lock:
provider: redisson
prefix: lock
3️⃣ 业务方法加锁
@DistributedLock(
key = "#user.id",
waitTime = 5,
leaseTime = 15,
lockType = LockType.REENTRANT
)
public void updateProfile(User user) {
// 并发安全的业务逻辑
}
✨ 无需关心锁的底层实现,只关注业务本身。
四、为什么推荐使用这种 Starter?
手写分布式锁往往容易踩坑:
- ❌ 锁误释放 / 死锁
- ❌ 不支持可重入 / 公平性
- ❌ 与业务代码强耦合
- ❌ 多后端难以维护
而这个 Starter 提供:
- 注解级抽象
- 多实现统一接口
- 完整的生命周期管理
- 更低的心智负担
五、典型实战场景
秒杀 / 扣库存
@DistributedLock(key = "#productId", leaseTime = 10, waitTime = 2)
public void seckill(String productId) {
// 扣库存、生成订单
}
分布式定时任务防重
@Scheduled(cron = "0 */5 * * * ?")
@DistributedLock(key = "'scheduled-job'", leaseTime = 60)
public void job() {
// 多实例下只会执行一次
}
六、总结
distributed-lock-spring-boot-starter 是一个:
- 清晰
- 解耦
- 可扩展
- 面向真实业务场景
的分布式锁解决方案。
如果你正在使用 Spring Boot,并且业务中存在并发写、定时任务、多实例执行等问题,非常值得一试。
👉 GitHub 项目地址:
github.com/ChildrenGre…
欢迎 ⭐ Star、Issue、PR,一起把这个 Starter 打磨得更好 🚀