# Redisson分布式锁集成2.4+ > JeecgBoot 分布式锁集成了redisson,本文以jeecg-demo模块为例介绍如何集成分布式锁 >应用场景:秒杀、团购、购买火车票、以及一系列高并发应用 [TOC] ## 第一步 jeecg-demo模块pom文件中引入分布式锁依赖 ~~~ <!-- 引入分布式锁依赖 --> <dependency> <groupId>org.jeecgframework.boot</groupId> <artifactId>jeecg-boot-starter-lock</artifactId> </dependency> ~~~ ## 第二步 jeecg-demo模块中编写分布式锁测试demo ~~~ /** * 分布式锁测试demo */ @Slf4j @Component public class DemoLockTest { @Autowired RedissonLockClient redissonLock; /** *注解方式测试分布式锁 */ @Scheduled(cron = "0/5 * * * * ?") @DistributedLock(lockKey= "redis-lock", expireSeconds = 11) public void execute() throws InterruptedException { log.info("执行execute任务开始,休眠三秒"); Thread.sleep(3000); System.out.println("=======================业务逻辑1============================="); log.info("execute任务结束,休眠三秒"); } /** * 编码方式测试分布式锁 */ @Scheduled(cron = "0/10 * * * * ?") public void execute2() throws InterruptedException { if (redissonLock.tryLock("redisson", -1, 10)) { log.info("执行任务execute2开始,休眠三秒"); Thread.sleep(3000); System.out.println("=======================业务逻辑2============================="); log.info("定时execute2结束,休眠三秒"); redissonLock.unlock("redisson"); } else { log.info("execute2获取锁失败"); } } } ~~~ ## DistributedLock注解使用说明 ~~~ public @interface DistributedLock { /** * 要锁的参数索引 */ int[] fieldIndexs() default {}; /** * 要锁的参数的属性名 */ String[] fieldNames() default {}; /** * 分布式锁名称 * * @return String */ String lockKey() default "redisson-lock"; /** * 锁超时时间(单位:秒) 如果超过还没有解锁的话,就强制解锁 * * @return int */ int expireSeconds() default 10; /** * 等待多久(单位:秒)-1 则表示一直等待 * * @return int */ int waitTime() default 5; /** * 未取到锁时提示信息 * * @return */ String failMsg() default "获取锁失败,请稍后重试"; } ~~~ ~~~ * @DistributedLock(lockKey= "redis-lock", expireSeconds = 11) 使用自定义lockKey 当lockKey未定义时以下定义有效 * @RedissonLock(fieldIndexs= 0) 锁第一个参数 * @RedissonLock(fieldIndexs= {0,1}) 锁第一个参数和第二个参数组合 * @RedissonLock(fieldIndexs= {1,2}) 锁第二个参数和第三个参数组合 * @RedissonLock(fieldIndexs= 0,fieldNames = "orderId") 使用第一个参数属性orderId作为lockKey * @RedissonLock(fieldIndexs= {0,1},fieldNames = {"orderId","userId"}) 使用第一个参数属性为orderId和第二个参数属性为userId的组合作为key ~~~ ## 分布式锁配置文件说明 分布式锁配置文件在jeecg专有配置中如下 ![](https://img.kancloud.cn/42/38/4238241fa3f1709eccab2bb07a3f558b_813x678.png) address:连接地址和端口 password:redis密码 type:redis部署方式 enabled:是否启用分布式锁 支持单机、哨兵、集群、主从4中redis部署方式 ### 1单机配置示例 ~~~ redisson.address=127.0.0.1:6379 redisson.type=STANDALONE ~~~ ### 2 哨兵配置示例 **redisson.lock.server.address**格式为: sentinel.conf配置里的sentinel别名,sentinel1节点的服务IP和端口,sentinel2节点的服务IP和端口,sentinel3节点的服务IP和端口 比如sentinel.conf里配置为sentinel monitor my-sentinel-name 127.0.0.1 6379 2,那么这里就配置my-sentinel-name ~~~ redisson.address=my-sentinel-name,127.0.0.1:26379,127.0.0.1:26389,127.0.0.1:26399 redisson.type=SENTINEL ~~~ ### 3 集群配置示例 cluster方式至少6个节点(3主3从,3主做sharding,3从用来保证主宕机后可以高可用) 地址格式为: 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384 ~~~ redisson.address=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384 redisson.type=CLUSTER ~~~ ### 4 主从配置示例 比如:127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381 代表主节点:127.0.0.1:6379,从节点127.0.0.1:6380,从127.0.0.1:6381 ~~~ redisson.address=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381 redisson.type=MASTERSLAVE ~~~