@Override public boolean getLock(int id) { TaskLockExample example = new TaskLockExample(); example.createCriteria() .andIdEqualTo(id) .andStatusEqualTo(0); List<TaskLock> taskLocks = taskLockMapper.selectByExample(example); if (CollUtil.isEmpty(taskLocks)) { return false; } TaskLock taskLock = taskLocks.get(0); Integer oldVersion = taskLock.getVersion();
TaskLockExample updateExample = new TaskLockExample(); updateExample.createCriteria().andIdEqualTo(id) .andVersionEqualTo(oldVersion) .andStatusEqualTo(0);
TaskLock newLock = new TaskLock(); newLock.setStatus(1); newLock.setVersion(oldVersion + 1); newLock.setUpdateTime(LocalDateTime.now()); // 通过更新的行数,得到是否获得锁 int i = taskLockMapper.updateByExampleSelective(newLock, updateExample); return i == 1; }
@Override public boolean releaseLock(int id) { TaskLock newLock = new TaskLock(); newLock.setId(id); newLock.setStatus(0); newLock.setUpdateTime(LocalDateTime.now()); int i = taskLockMapper.updateByPrimaryKeySelective(newLock); return i == 1; }