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

Azure Cosmos DB MongoDB API 4.0 transaction feature not working with `spring-boot-starter-data-mongodb`

我已经安装了 cosmos mongodb server 4.0,还有

MongoTransactionManager bean 设置和应用@Transactional在我的 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 交易功能的样本吗?

我使用的依赖项:

Spring-boot-starter-parent 2.4.3 和 spring-boot-starter-data-mongodb

分区集合不支持 CosmosDB 事务。

引用自微软的开发博客https://devblogs.microsoft.com/cosmosdb/three-reasons-to-upgrade-to-azure-cosmos-db-api-for-mongodb-4-0/:

Multi-Document Transactions: Multi-document transactions within an unsharded collection support enables you to group together dependent operations and treat them as one operation, while respecting all ACID semantics.

如果您可以接受 10,000 RU 的硬性限制,您可以将其取消共享并使用交易。