# zk-lock-demo **Repository Path**: liangshij/zk-lock-demo ## Basic Information - **Project Name**: zk-lock-demo - **Description**: 基于zk手写一个简单锁。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-07 - **Last Updated**: 2023-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 介绍 基于zk手写一个分布式锁,使用起来简单方便。 ### 包介绍 lsj-zk-lock:核心实现。 lsj-zk-lock-spring-boot-starter:整合springboot lsj-zk-lock-test:使用demo ### 安装教程 1. 拉取代码,将`lsj-zk-lock`、`lsj-zk-lock-spring-boot-starter`通过 `mvn install` 命令安装到本地仓库。 2. 引入依赖: ```xml cn.lsj lsj-zk-lock-spring-boot-starter 2.4.2 ``` ### 使用方式 - 配置locks和dataSource: ```yaml spring: zk: dataSource: url: "localhost" port: 2181 locks: - zkPath: "/test/lock" lockName: "countLock" # 获取锁失败时,进入等待的时间,等待结束将重新尝试获取锁 timeout: 5000 - zkPath: "/test2/lock" lockName: "lock" timeout: 5000 ``` - 使用方式1:通过`@GlobalLock`注解,指定要使用那个lock ```java @GetMapping("test2") @GlobalLock("countLock") public String test2() { // 业务代码 return ""; } ``` - 使用方式2:通过`@Qualifier`注解,指定要使用那个lock ```java @RestController public class TestController { int count = 0; @Resource @Qualifier("lock") private ReentrantLock lock; @Resource @Qualifier("countLock") private ReentrantLock countLock; @GetMapping("test") public String test() { countLock.lock(); try{ for (int i = 0; i < 10000; i++) { count++; } } finally { countLock.unlock(); } return String.valueOf(count); } } ```