当前位置: 首页 > 知识库问答 >
问题:

Azure Cosmos DB MongoDB API 4.0事务功能不适用于“spring-boot-starter-data-mongob”

韦星文
2023-03-14

我放置了cosmos mongoDB服务器4.0,也有

MongoTransactionManager的bean设置,并在我的poc中的方法上应用事务,如下所示:


@Configuration
class Config extends AbstractMongoConfiguration {

  @Bean
  MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
    return new MongoTransactionManager(dbFactory);
  }
}


@Service
class DocumentService {

  private final MongoOperations operations;

  DocumentService(MongoOperations operations) {
    this.operations = operations;
  }

  @Transactional
  void insertDocuments() {

    operations.insert(documentOne);
    operations.insert(documentTwo);

// manually raise error here
    Int error = 1/0

  }
}

我期望的是它不应该向数据库插入任何记录,直到它到达方法的末尾而没有任何错误。在上面的片段中,当我在调试时,我可以看到每个插入都存储在数据库中,当错误发生时,没有触发回滚,这完全不是ACID。

使用相同的示例,我能够在纯MongoDB 4.0服务器中使用事务功能。

我找不到任何示例或留档的Java或spring-boot-data-mongo实现的事务功能。

所以我的问题是:

  1. Azure Cosmos DB MongoDB API 4.0交易功能是否与spring boot starter data MongoDB兼容
  2. 我们有Java和spring boot starter data mongodb for transaction功能的示例吗

我使用的依赖项:

sping-boot-starter-父2.4.3和sping-boot-starter-data-mongoDB

共有1个答案

程阳平
2023-03-14

分区集合不支持CosmosDB事务。

引用Microsoft的devbloghttps://devblogs.microsoft.com/cosmosdb/three-reasons-to-upgrade-to-azure-cosmos-db-api-for-mongodb-4-0/:

多文档事务:非分块集合支持中的多文档事务使您能够将依赖的操作分组在一起,并将它们视为一个操作,同时尊重所有ACID语义。

如果您同意集合的10000 RU硬限制,则可以将其设为非共享并使用事务。

 类似资料:
  • 这里的期望是它不应该在PERSON表中插入任何记录,因为它会在插入第三个PERSON对象时抛出异常。但是它没有回滚,前2条记录被插入并提交。 然后我想到了快速尝试使用JPA EntityManager。 然后我得到javax.persistence.TransactionRequiredException:没有可用的事务性EntityManager异常。 然后em.save(person)按预期工

  • 我有一个实体: 而听众: 我正在使用为这个实体(1.4.1)和EclipseLink生成的Spring Data。代码行为如下所示: 这个问题在2009年已经有人描述过了,但是他们没有提出任何解决方案。不知道有没有人有办法解决?

  • 我刚刚遇到了一个关于spring boot starter aop许可的问题 spring boot starter aop附带一个到aspectjweaver的非可选编译传递依赖项。 尽管aspectjweaver是根据EPL 1.0授权的,据我所知,EPL 1.0要求任何使用它的项目都必须公开其源代码。因为我们正在开发一种商业产品,所以我们不能公开代码。 这是否意味着Spring AOP只能用

  • 我正在开发一个Spring Boot项目,目前正在尝试实现验证。例如,我有以下类: 包abcdef.mypackage 您可以看到,我已经用我想要的验证对所有字段进行了注释。传入请求由以下控制器类处理: 当我现在用一个空的用户名值发出请求时,Spring Boot仍然接受它并存储到数据库中。我在StackOverflow上找到了一些关于缺少依赖项的问题(和答案),但是我把它们都包括进来了。你可以在

  • null 我想知道这三者之间的区别。尝试搜索在线文档,其中说这三个几乎与spring数据有关。如何化解困惑? 在这里,我还发现了另一个依赖项spring-boot-starter-web-services。我认为它同时支持SOAP和REST。这只是我的假设,我在等待一个解释

  • 问题内容: 我试图将@NotNull约束添加到我的Person对象中,但是我仍然可以@POST具有空电子邮件的新Person。我在MongoDB上使用Spring Boot Rest。 实体类: 存储库类: 应用类别: pom.xml 当我通过邮递员@POST一个新对象时,例如: 我仍然使用此有效负载创建: 问题答案: 我遇到了同样的问题,但是仅启用验证对我而言不起作用,这确实与JPA和Mongo