0

我有一个由 spring rest 控制器调用的单例 spring 服务。

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

public void addRecordIfNotExistsBefore(String record){

    boolean isExist = checkIfRecordNotExitsBefore();

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

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

我可以在一些简单的实现中应用双重检查习语,例如:

public void addRecordIfNotExistsBefore(String record){

    boolean isExist = checkIfRecordNotExitsBefore();

    if (!isExist){
        synchoronized(this){

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

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

4

1 回答 1

2

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

于 2015-06-04T06:34:27.623 回答