diff --git a/README.md b/README.md index 69ea68c3d66305e572b09d5fa98bfb81331c0b65..ffac8543994e6603ad4128f02ec77731d445b50a 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ DDK-动态字典键,接入方只需要接入字典键SDK,即可以完成相 | desc | varchar(80) | 功能描述 | | create_time | datetime | 创建时间 | | update_time | datetime | 更新时间 | -| is_delete | int(11) | 状态 1有效,0无效 | +| is_delete | int(11) | 状态 状态 1删除,0未删除 | | env | varchar(16) | 环境 | ### 事业群 @@ -332,11 +332,11 @@ CREATE TABLE `ddk_group` DROP TABLE IF EXISTS `ddk_lock`; CREATE TABLE `ddk_lock` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `resource` varchar(200) NOT NULL COMMENT '锁定的资源', - `desc` varchar(200) NOT NULL DEFAULT '' COMMENT '描述', - `create_time` datetime NOT NULL COMMENT '创建时间', - `env` varchar(16) NOT NULL COMMENT '环境', + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `resource` varchar(200) NOT NULL COMMENT '锁定的资源', + `desc` varchar(200) NOT NULL DEFAULT '' COMMENT '描述', + `create_time` datetime NOT NULL COMMENT '创建时间', + `env` varchar(16) NOT NULL COMMENT '环境', PRIMARY KEY (`id`), UNIQUE KEY `uiq_idx_resource` (`resource`) ) ENGINE=InnoDB AUTO_INCREMENT=667 DEFAULT CHARSET=utf8mb4 COMMENT='数据库分布式锁表'; @@ -438,48 +438,44 @@ FOREIGN_KEY_CHECKS = 1; - 加锁的实现如下,比较简单的实现,一般分布式锁实现都是使用Redis等 ```java -@Service -public class LockServiceImpl implements LockService { - - private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(LockServiceImpl.class); - - @Resource - private LockMapper lockMapper; - - private static final int TIMEOUT = 3000; - - @Override - public Long acquire(String key) { - // 查询 - String env = EnvUtils.getEnv(); - LockDO oldLock = lockMapper.queryByResource(key, env); - if (oldLock != null) { - if (System.currentTimeMillis() - oldLock.getCreateTime().getTime() > TIMEOUT) { - release(key, oldLock.getId()); - } - return null; - } +@Service public class LockServiceImpl implements LockService { + + private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(LockServiceImpl.class); + + @Resource private LockMapper lockMapper; + + private static final int TIMEOUT = 3000; - try { - LockDO lockDO = new LockDO(); - lockDO.setResource(key); - lockDO.setDesc(key); - lockDO.setEnv(env); - lockDO.setCreateTime(new Date()); - lockMapper.insert(lockDO); - return lockDO.getId(); - } catch (DuplicateKeyException ex) { - LOGGER.warn("[LockService][acquire][DuplicateKeyException] lock acquire error:{}", ThrowableUtil.stackTraceToString(ex)); - } catch (Exception ex) { - LOGGER.warn("[LockService][acquire][Exception] lock acquire error:{}", ThrowableUtil.stackTraceToString(ex)); + @Override public Long acquire(String key) { + // 查询 + String env = EnvUtils.getEnv(); + LockDO oldLock = lockMapper.queryByResource(key, env); + if (oldLock != null) { + if (System.currentTimeMillis() - oldLock.getCreateTime().getTime() > TIMEOUT) { + release(key, oldLock.getId()); + } + return null; + } + + try { + LockDO lockDO = new LockDO(); + lockDO.setResource(key); + lockDO.setDesc(key); + lockDO.setEnv(env); + lockDO.setCreateTime(new Date()); + lockMapper.insert(lockDO); + return lockDO.getId(); + } catch (DuplicateKeyException ex) { + LOGGER.warn("[LockService][acquire][DuplicateKeyException] lock acquire error:{}", ThrowableUtil.stackTraceToString(ex)); + } catch (Exception ex) { + LOGGER.warn("[LockService][acquire][Exception] lock acquire error:{}", ThrowableUtil.stackTraceToString(ex)); + } + return null; } - return null; - } - @Override - public boolean release(String key, Long lockId) { - return lockMapper.delete(lockId, key, EnvUtils.getEnv()) > 0; - } + @Override public boolean release(String key, Long lockId) { + return lockMapper.delete(lockId, key, EnvUtils.getEnv()) > 0; + } }