// mapper,注意,这里的参数最好就是主键或者唯一键,否则产生的是表锁
@Select("<script> select* from foo where id = #{id} for update</script>")
Foo selectForUpdateById(@Param("id") Long id);
// service,必须加事物,否则selectForUpdateById无法实现分布式锁的作用
@Transactional(rollbackFor = Exception.class, propagation = Propatation.REQUIRED)
public void test() {
log.info("任意进程都能同时到这里来");
Foo foo = mapper.selectForUpdateById("存在的id");
// 这里开始是临界区,只能有一个进程进来;
assert foo != null;
log.info("只有获得了'分布式锁'的进程能到这里来,执行完毕commit后会释放分布式锁,是commit而非线程结束");
}
标签:springboot,update,selectForUpdateById,foo,id,select,分布式 From: https://www.cnblogs.com/silentdoer/p/17792948.html