如何在 Spring Data MongoDB 中使用乐观锁?

2023-11-27

我正在经历Spring Data MongoDB - 参考文档我发现这些例子有点过于简单化。

特别是我试图了解如何在并发环境中处理过时的数据。例如,假设我有以下实体:

public class Person {

    private final String username;
    private final String firstname;
    private final String lastname;

    [...]

}

现在如果我使用CrudRepository要保存/更新/删除我的实体,然后想象一个场景,其中两个线程检索相同的实体,其中一个线程删除它,另一个线程更新它的实体lastname场地。如果delete调用之前完成save调用,然后我的实体将被删除,然后重新创建,此时预期的行为将是save操作失败。

到目前为止,我已经看到了解决此问题的两种选择:

  1. Use @Version注解。找不到任何文档说明 Spring Data 使用版本化文档支持 MongoDB 中的乐观锁定。如果有人能指出我的链接,我将不胜感激。
  2. Use MongoOperations.findAndModify如果返回则失败null。这种方法的缺点是我无法再实现存储库 API 来具有“获取实体”和“保存更新的实体”类型的语义。例如。:

    User user = userRepository.findByUsername("uniqueUsername");
    user.setLastName("Archer");
    userRepository.update(user);
    

我想我必须将其中一些推送到存储库:

userRepository.updateLastname("uniqueUsername", "Archer");

但我有点担心,如果我想做的每种类型的更新都需要一种新方法,我的存储库接口将会不受控制地增长。

我意识到我还没有真正提出一个问题,所以这里是:使用 Spring Data for MongoDB 设计应用程序的最佳实践是什么?


Using @org.springframework.data.annotation.Version在财产上应该可以解决问题。我已经创建了DATAMONGO-1275改进这方面的文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring Data MongoDB 中使用乐观锁? 的相关文章

随机推荐