Java Spring data mongodb并发获取和更新是线程安全的吗?
我有以下问题:我有一个java服务,它对mongodb数据库中存储的值求和或求差 例如,如果数据库中的值为100,而调用我的服务时的值为10,则会发生以下情况:Java Spring data mongodb并发获取和更新是线程安全的吗?,java,spring,multithreading,mongodb,concurrency,Java,Spring,Multithreading,Mongodb,Concurrency,我有以下问题:我有一个java服务,它对mongodb数据库中存储的值求和或求差 例如,如果数据库中的值为100,而调用我的服务时的值为10,则会发生以下情况: 我从数据库中得到值100 我把100和10相加 我将新值(110)再次保存到数据库中 然而,我害怕并发性。如果有很多人打同一个电话,会发生什么?我担心在过程的最后会出现不一致的价值观 问题是:上述过程是线程安全的吗?(我认为不是)。我应该做些什么来保持数据的一致性并处理这个线程并发性 更新 下面是代码 public void upd
- 我从数据库中得到值100
- 我把100和10相加
- 我将新值(110)再次保存到数据库中
public void update(Size entity, Integer newValue) {
Size size = repository.findOneById(entity.getId());
size.setTotal(size.getTotal() + newValue);
repository.update(size);
}
不,它不是线程安全的,因为它不是以原子方式完成的,因为
MongoDB
不是事务数据库,您应该使用$inc
操作符来满足这样的需要,因为它允许以原子方式增加给定数量的给定字段,更多详细信息