# distributed-lock **Repository Path**: gengwei_940116/distributed-lock ## Basic Information - **Project Name**: distributed-lock - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-24 - **Last Updated**: 2021-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # distributed-lock 基于redisson分布式锁 介绍 使用说明: 1. 基于redisson,springboot开发 2. 基于spring aop功能,优先级高于事务切面,保证在事务完成后释放锁 3. 锁名称基于spel,可根据方法入参解析得到最终锁名称 4. redis配置,spring.redisson配置 -> spring.redis -> 默认配置 第一步:在pom加入依赖 ``` com.minivision distributed-lock 0.0.1-SNAPSHOT ``` 第二步:在启动类上加入注解 ``` @SpringBootApplication @EnableDistributedLock public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 第三步:yml中配置redis ``` # common spring boot settings spring: redis: database: host: port: password: ssl: timeout: cluster: nodes: sentinel: master: nodes: # Redisson settings #path to config - redisson.yaml redisson: file: classpath:redisson.yaml config: | clusterServersConfig: idleConnectionTimeout: 10000 connectTimeout: 10000 timeout: 3000 retryAttempts: 3 retryInterval: 1500 failedSlaveReconnectionInterval: 3000 failedSlaveCheckInterval: 60000 password: null subscriptionsPerConnection: 5 clientName: null loadBalancer: ! {} subscriptionConnectionMinimumIdleSize: 1 subscriptionConnectionPoolSize: 50 slaveConnectionMinimumIdleSize: 24 slaveConnectionPoolSize: 64 masterConnectionMinimumIdleSize: 24 masterConnectionPoolSize: 64 readMode: "SLAVE" subscriptionMode: "SLAVE" nodeAddresses: - "redis://127.0.0.1:7004" - "redis://127.0.0.1:7001" - "redis://127.0.0.1:7000" scanInterval: 1000 pingConnectionInterval: 0 keepAlive: false tcpNoDelay: false threads: 16 nettyThreads: 32 codec: ! {} transportMode: "NIO" ``` 第四步:在方法上加注解 ``` @Service @Slf4j public class LockService { @DistributedLock(namespace = "TEST-DISTRIBUTED-LOCK-", lockName = "#lockDTO.id + '_' + #lockDTO.name", lockType = LockTypeEnum.READ_LOCK) public String say(LockDTO lockDTO) { log.info("lockDTO:{}", lockDTO); try { Thread.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } return "hello world!"; } } ```