Spring boot 为Couchbase应用程序添加事务管理器。在用于Junit测试的SpringBoot 2应用程序中

Spring boot 为Couchbase应用程序添加事务管理器。在用于Junit测试的SpringBoot 2应用程序中,spring-boot,spring-data-jpa,spring-data,couchbase,spring-data-couchbase,Spring Boot,Spring Data Jpa,Spring Data,Couchbase,Spring Data Couchbase,我有一个SpringBoot 2应用程序,它使用Couchbase作为数据库,使用SpringDataCouchbase 我想添加一个事务管理器,以便在测试中添加注释@Transactional,以执行回滚,否则会出现以下错误: java.lang.IllegalStateException: Failed to retrieve PlatformTransactionManager for @Transactional test: [DefaultTestContext@3bf9ce3e te

我有一个SpringBoot 2应用程序,它使用Couchbase作为数据库,使用SpringDataCouchbase

我想添加一个事务管理器,以便在测试中添加注释
@Transactional
,以执行回滚,否则会出现以下错误:

java.lang.IllegalStateException: Failed to retrieve PlatformTransactionManager for @Transactional test: [DefaultTestContext@3bf9ce3e testClass = RequestServiceIntegrationTest, testInstance = com.pxs.rqm.requestcrud.service.RequestServiceIntegrationTest@1ebcfcf1, testMethod = shouldSaveWhenDataIsOK@RequestServiceIntegrationTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@16610890 testClass = RequestServiceIntegrationTest, locations = '{}', classes = '{class com.pxs.rqm.requestcrud.Application}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@971d0d8, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@564718df, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@36f0f1be, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@2145433b], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]]

    at org.springframework.util.Assert.state(Assert.java:94)
    at org.springframework.test.context.transaction.TransactionalTestExecutionListener.beforeTestMethod(TransactionalTestExecutionListener.java:185)

尽管我们试图支持大多数Spring接口,@Transactional接口是特定于关系数据库的

Couchbase中的更新是原子的(要么全部更新,要么什么都不更新),而且由于数据建模的方式不同于关系数据,因此通常不需要经常进行事务。例如,考虑一个用户,与之相关的所有数据(首选项、地址、信用卡)都将存储在同一个文档中,这就是为什么在这种情况下通常不需要进行交易的原因


但是,如果您需要同时更新多个文档,那么您可以考虑使用仅在SDK 3上可用的事务的新支持(现在)

它不构成更新多个文档,用于回滚单元TestSUMMM。我认为这个场景的正确方法是在每次测试后使用repository.deleteAll()或刷新bucket()引号:“@Transactional interface特定于关系数据库。”-1。大多数其他键/值或文档存储都支持PlatformTransactionManager。例如,MongoDB和Hazelcast都有相应的TransactionManager。大多数spring程序员都使用该注释处理事务。在我看来,这是一个很大的缺失功能,它使得从另一个documentstore迁移变得困难