我们有一个带有控制器类的Spring Boot应用程序,该类从客户端调用并与DB交互。根据条件,控制器检查唯一值的记录是否存在,如果不存在,它将创建新记录(具有自动生成的主键)并保存。
现在并发问题处于这种情况:
class A
的两个不同的对象想要一个值为class B
的{{1}}的对象,它们都在数据库中同时检查,它们得到b1
,现在他们尝试创建值为null
的{{1}}新对象,这时出错了。
我尝试使用简单的双重锁定方法
class B
,但后来意识到我的应用程序在两个JVM上运行,这两个JVM使用一个公共数据库。经过一些问题后,我想到了另一个选择,
@Transacational(isolation = REPEATABLE_READ)
但是我不确定它是否可以在我的场景中使用,正如它的解释所说,在修改一行中的数据时它很有用,但是我正在创建一个新行。由于这种情况很少见,并且涉及多个JVM,因此我无法对其进行确定的测试。