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在极端场景下,理论正确性没那么严谨。
java进行数据库操作的并发控制的2种方法的更多相关文章
- Java实现数据库操作
Java实现数据库操作 这里的样例是使用mysql数据库 代码实现 /* MySQLHelper.java */ import java.io.*; import java.util.*; impor ...
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
- Java 判断字符串是否为空的四种方法、优缺点与注意事项
以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s));方法二: ...
- (转载)Java中如何遍历Map对象的4种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- Java构造和解析Json数据的两种方法详解二
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...
- java double类型保留两位小数4种方法【转】
4种方法,都是四舍五入,例: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberF ...
- Java中取小数点后两位(四种方法)
摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法) 一 Long是长整型,怎么有小数,是double吧 java.text.D ...
- Java构造和解析Json数据的两种方法详解二——org.json
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的jso ...
- Java构造和解析Json数据的两种方法详解一——json-lib
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...
- java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 标签: hashmaphashmap冲突解决冲突的方法冲突 2016-0 ...
随机推荐
- 山东大学&安恒校赛CTF
1.babyshell 这段代码是一个函数seccom,它使用seccomp机制来限制进程的系统调用权限.seccomp是一种Linux内核的安全模块,可以用于过滤或限制进程可以执行的系统调用. 具体 ...
- Vue源码学习(十三):nextTick()方法
好家伙,nextTick, (...这玩意,不太常用) 1.什么是nextTick 在Vue中,nextTick是一个用于异步执行回调函数的方法. 它在Vue更新DOM后被调用,以确保在下一次DOM更 ...
- JavaScript:判断数据类型的四种方法
JavaScript目前有两种数据类型:基本数据类型和引用数据类型. 基本数据类型:Undefined.Null.Boolean.String.Number.Symbol(ES6) 引用数据类型:Ob ...
- Java Lambda 表达式常见面试问题与解答
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 在本文中,我们将讨论一些重要且常见的 Java Lambda 表达式面试问题和解答 1.什么是 Lambda 表达式? l ...
- 算法训练 字符串的展开(isdigit与islower的发现)
在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于"d-h"或者"4-8"的字串,我 ...
- 一个简单案例的Vue2.0源码
本文学习vue2.0源码,主要从new Vue()时发生了什么和页面的响应式更新2个维度了解Vue.js的原理.以一个简单的vue代码为例,介绍了这个代码编译运行的流程,在流程中原始DOM的信息会被解 ...
- mysql--基础管理
1.docker环境登录mysql PS C:\WINDOWS\system32> docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS P ...
- 企业ERP和泛微OA集成场景分析
轻易云数据集成平台(qeasy.cloud)为企业ERP和泛微OA系统提供了强大的互通解决方案,特别在销售.采购和库存领域的单据审批场景中表现出色.这些场景涉及到多个业务单据的创建和审批,以下是一些具 ...
- js实现在报表参数界面获取body中控件的值
要在报表参数界面获取body中控件的值,你可以使用JavaScript来实现.下面是一个详细的介绍: 1. DOM(文档对象模型): - DOM是用于操作HTML文档的API,它允许你通过JavaSc ...
- 开发环境搭建:CubeMX、Keil MDK-ARM、仿真器驱动程序
来源:成电<微机原理与嵌入式系统>漆强 第三章 STM32微控制器开发环境的搭建 一.STM32 CubeMX的安装 1.STM32 CubeMX的下载和安装 先安装java环境安装 下载 ...