gpt4 book ai didi

java - 在 spring bean 中访问 Db 时的线程安全

转载 作者:行者123 更新时间:2023-12-02 04:36:58 30 4
gpt4 key购买 nike

我有一个由 Spring Rest Controller 调用的单例 Spring 服务。

单例服务MyService有一些方法addRecordIfNotExistsBefore,它具有以下实现:

public void addRecordIfNotExistsBefore(String record){

boolean isExist = checkIfRecordNotExitsBefore();

if (!isExist){
addRecordToDb(record);
}
}

问题是 - 正如所显示的 - 当两个客户端同时请求相同的服务时,记录会被添加到数据库中两次。

我可以申请double-check idiom在一些简单的实现中,例如:

public void addRecordIfNotExistsBefore(String record){

boolean isExist = checkIfRecordNotExitsBefore();

if (!isExist){
synchoronized(this){

isExist = checkIfRecordNotExitsBefore();
if (!isExist){
addRecordToDb(record);
}
}
}
}

它是有效的解决方案,还是有其他更好的解决方案?

最佳答案

我认为唯一的解决方案是使用数据库约束来检查应用程序部署在多个节点中的数据库场景中记录的唯一性

关于java - 在 spring bean 中访问 Db 时的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633099/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com