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

本文分享自华为云社区《java进行数据库操作的并发控制》,作者:张俭。

在现代应用编码中,从数据库里面find出来,进行一些业务逻辑操作,最后再save回去。即:

Person person = personRepo.findById(id);
person.setAge(18);
personRepo.save(person);

但是这样的业务操作,如果一个线程修改年龄,另一个线程修改昵称,最后save回去,可能会导致年龄/昵称某一个的修改被覆盖。

常见的解决方案有两种

执行前添加悲观锁

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

乐观锁思路实现

版本控制是另一种流行的处理并发问题的方法。它通过在每次更新记录时递增版本号来确保数据的一致性。

这在JPA中,可以通过在field上添加@Version注解来实现,但这也就要求①数据库中必须有version字段,②对于查找后更新类操作,必须使用JPA的save方法来进行更新。

当然也可以通过update_time来模拟乐观锁实现,这可能需要你在更新的时候添加update_time的条件,并且,update_time在极端场景下,理论正确性没那么严谨。

点击关注,第一时间了解华为云新鲜技术~

博通宣布终止现有 VMware 合作伙伴计划 deepin-IDE 版本更新,旧貌换新颜 周鸿祎:鸿蒙原生必将成功 WAVE SUMMIT 迎来第十届,文心一言将有最新披露! 养乐多公司确认 95 G 数据被泄露 2023 年各编程语言中最流行的许可证 《2023 中国开源开发者报告》正式发布 Julia 1.10 正式发布 Fedora 40 计划统一 /usr/bin 和 /usr/sbin Rust 1.75.0 发布
{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/4526289/blog/10443380