Lock4j 使用说明
Lock4j 使用说明
Lock4j 是一个基于 Spring 的分布式锁框架,提供了简单易用的分布式锁功能。以下是 Lock4j 的基本使用说明:
1. 添加依赖
首先需要在项目中添加 Lock4j 的依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>lock4j-redisson-spring-boot-starter</artifactId><version>最新版本</version>
</dependency>
2. 基本配置
在 application.yml 或 application.properties 中添加基本配置:
lock4j:acquire-timeout: 3000 # 获取锁超时时间(毫秒)expire: 30000 # 锁过期时间(毫秒)
3. 使用注解方式加锁
@Lock4j 注解
@Service
public class YourService {@Lock4j(expire = 60000, acquireTimeout = 1000, keys = {"#param"})public void yourMethod(String param) {// 业务逻辑}
}
注解参数说明:
expire
: 锁过期时间(毫秒)acquireTimeout
: 获取锁超时时间(毫秒)keys
: 锁的key,支持SpEL表达式
支持SpEL表达式
@Lock4j(keys = {"#user.id", "#user.name"})
public void method(User user) {// 业务逻辑
}
4. 编程式加锁
@Service
public class YourService {@Autowiredprivate LockTemplate lockTemplate;public void yourMethod() {// 尝试获取锁boolean locked = lockTemplate.lock("lockKey", 10000, 60000);if (locked) {try {// 业务逻辑} finally {// 释放锁lockTemplate.releaseLock("lockKey");}} else {// 获取锁失败处理}}
}
5. 高级特性
锁失败策略
Lock4j 提供了多种锁失败策略:
@Lock4j(acquireTimeout = 1000, acquireTimeoutStrategy = AcquireTimeoutStrategy.FAIL_FAST)
public void methodWithStrategy() {// 业务逻辑
}
支持的策略:
FAIL_FAST
: 快速失败,直接抛出异常KEEP_ACQUIRE
: 持续尝试获取锁(默认)SKIP
: 跳过,不执行方法
自定义锁失败处理
@Lock4j(onLockFailure = "customLockFailure")
public void methodWithCustomFailure() {// 业务逻辑
}public void customLockFailure(Object[] args) {// 自定义锁失败处理逻辑
}
6. 注意事项
- 确保锁的key具有唯一性,避免不同业务使用相同的key
- 合理设置锁的过期时间,避免锁过期导致并发问题或锁未释放
- 在事务方法中使用分布式锁时要注意事务和锁的顺序问题
- 释放锁操作应该放在finally块中确保一定会执行
7. 集成不同实现
Lock4j 支持多种底层实现,可以根据需要选择:
- Redisson
- Zookeeper
- RedisTemplate
只需引入对应的starter并配置即可。
以上是 Lock4j 的基本使用说明,具体使用时请参考官方文档和实际业务场景进行调整。