【发布时间】:2020-06-17 15:29:24
【问题描述】:
我正在学习 Spring Boot 和并发。我知道当spring boot收到多个请求时,它会启动多个线程来处理请求。我这里有一个访问 mongo 的方法。此方法将保存一个新的 someResult(可能包含调用者设置的一些新值)。我的问题是,如果我的 spring boot 控制器有 100 个并发调用,并且我得到 someResult 对象,并设置值和保存等,这些值会不一致吗?
public void upsert(SomeResult someResult) {
String collection = this.SomeResultConfig.getCollectionSomeResultCollection();
String queryStr = "{testingID : '%s'}";
queryStr = String.format(queryStr, someResult.getTestingID());
Query query = new BasicQuery(queryStr);
List<SomeResult> someResultList = this.mongoOps.find(query, SomeResult.class, collection);
if (someResult.size() != 0) {
this.mongoOps.findAllAndRemove(query, collection);
}
this.mongoOps.save(someResult, collection);
}
【问题讨论】:
-
Yes 值会不一致,因为您正在执行多个操作。使用事务。支持 Mongo server 4.x 版本和Spring data mongdb
标签: java spring-boot concurrency