数据库表
create table if not exists yw_lock
(
lock_field varchar(50) not null,
lock_table varchar(50) not null,
constraint pk_yw_lock
primary key (lock_field, lock_table)
);
comment on table yw_lock is '分布式锁';
comment on column yw_lock.lock_field is '业务锁';
create index if not exists index_yw_lock_all
on yw_lock (lock_field, lock_table);
lock实体类
@Data
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "yw_lock")
public class YwLock implements Serializable {
/**
* 业务锁
*/
private String lockField;
/**
* 业务表
*/
private String lockTable;
}
public interface YwLockMapper {
int lock(YwLock ywLock);
int unLock(YwLock ywLock);
}
<insert id="lock" parameterType="YwLock">
INSERT INTO yw_lock (
lock_field,
lock_table
) VALUES (
#{lockField},
#{lockTable}
);
</insert>
<delete id="unLock" parameterType="YwLock">
DELETE
FROM yw_lock
WHERE lock_field = #{lockField} and lock_table = #{lockTable}
</delete>
Service层实现
public interface IYwLockService {
/**
* 加锁
*/
boolean lock(YwLock ywLock);
/**
* 解锁
*/
boolean unLock(YwLock ywLock);
}
implements实现
@Service
public class YwLockServiceImpl implements IYwLockService {
@Resource
private YwLockMapper lockMapper;
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public boolean lock(YwLock ywLock) {
return lockMapper.lock(ywLock) > 0;
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public boolean unLock(YwLock ywLock) {
return lockMapper.unLock(ywLock) > 0;
}
}
通过service获取到lock返回为true:表示拿到锁,可以做业务操作,反知道不能做业务操作