java进行数据库操作的并发控制的2种方法

东湖之滨  金牌会员 | 2024-3-5 23:33:50 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 960|帖子 960|积分 2884

本文分享自华为云社区《java进行数据库操作的并发控制》,作者:张俭。
在现代应用编码中,从数据库里面find出来,进行一些业务逻辑操作,最后再save回去。即:
  1. Person person = personRepo.findById(id);
  2. person.setAge(18);
  3. personRepo.save(person);
复制代码
但是这样的业务操作,如果一个线程修改年龄,另一个线程修改昵称,最后save回去,可能会导致年龄/昵称某一个的修改被覆盖。

常见的解决方案有两种
执行前添加悲观锁

通过分布式锁等方式,保证同一时间只有一个线程能够对数据进行修改。
乐观锁思路实现

版本控制是另一种流行的处理并发问题的方法。它通过在每次更新记录时递增版本号来确保数据的一致性。
这在JPA中,可以通过在field上添加@Version注解来实现,但这也就要求①数据库中必须有version字段,②对于查找后更新类操作,必须使用JPA的save方法来进行更新。
当然也可以通过update_time来模拟乐观锁实现,这可能需要你在更新的时候添加update_time的条件,并且,update_time在极端场景下,理论正确性没那么严谨。
点击关注,第一时间了解华为云新鲜技术~
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表