简介
lock4j-spring-boot-starter是一个分布式锁组件,其提供了多种不同的支持以满足不同性能和环境的需求。
立志打造一个简单但富有内涵的分布式锁组件。
2.1.0
- feat: 新增Lock4jProperties支持全局配置锁过期、获取锁超时时间、默认锁执行器等
- update: 修改Lock4j注解里的lockClient参数名为executor
- update: 新增锁执行器支持自定义扩展,支持方法级别配置executor
- update: 修改锁执行器为单例
- remove: 移除Lock4j注解里的lockType参数
- remove: 移除Lock4j注解里的keyBuilder参数(扩展keyBuilder需要自行实现LockKeyBuilder接口并声明为spring bean)
- fix: 修复lockExecutor没有引入相关class的情况下抛class no found
- feat: 新增不指定executor前提下,默认优先级redisson>redisTemplate>zookeeper
- remove: 移除Lock4j注解里的LockFailureStrategy参数(自定义lock失败处理需要自行实现LockFailureStrategy接口并声明为spring bean)
- feat: 支持声明式@Lock4j、编程式@Autowired LockTemplate
特性
- 简单易用,功能强大,扩展性强。
- 支持redission,redisTemplate,zookeeper。可混用,支持扩展。
如何使用
- 引入相关依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>lock4j-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
<!--若使用redisTemplate作为分布式锁底层,则需要引入-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--若使用redisson作为分布式锁底层,则需要引入-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.6</version>
</dependency>
<!--若使用zookeeper作为分布式锁底层,则需要引入-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
- 根据底层需要配置redis或zookeeper。
spring:
redis:
host: 127.0.0.1
...
coordinate:
zookeeper:
zkServers: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
- 在需要分布式的地方使用Lock4j注解。
@Service
public class DemoService {
//默认获取锁超时3秒,30秒锁过期
@Lock4j
public void simple() {
//do something
}
//完全配置,支持spel
@Lock4j(keys = {"#user.id", "#user.name"}, expire = 60000, acquireTimeout = 1000)
public User customMethod(User user) {
return user;
}
}
高级使用
- 配置全局默认的获取锁超时时间和锁过期时间。
lock4j:
acquire-timeout: 3000 #默认值3s,可不设置
expire: 30000 #默认值30s,可不设置
primary-executor: com.baomidou.lock.executor.RedisTemplateLockExecutor #默认redisson>redisTemplate>zookeeper,可不设置
- 自定义执行器。
@Service
public class DemoService {
//可在方法级指定使用某种执行器,若自己实现的需要提前注入到Spring。
@Lock4j(executor = RedissonLockExecutor.class)
public Boolean test() {
return "true";
}
}
- 自定义锁key生成器。
默认的锁key生成器为 com.baomidou.lock.DefaultLockKeyBuilder 。
@Component
public class MyLockKeyBuilder extends DefaultLockKeyBuilder {
@Override
protected String getKeyPrefix() {
return "myKey"; //默认是lock4j开头
}
}
- 自定义锁获取失败策略。
默认的锁获取失败策略为 com.baomidou.lock.DefaultLockFailureStrategy 。
@Component
public class MyLockFailureStrategy implements LockFailureStrategy {
@Override
public void onLockFailure(String key, long acquireTimeout, int acquireCount) {
// write my code
}
}