gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:23:33 27 4
gpt4 key购买 nike

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

我想添加一个事务管理器在测试中添加注解@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 接口(interface),但 @Transactional 接口(interface)是特定于关系数据库的。

Couchbase 中的更新是原子的(全有或全无),并且由于数据建模的方式不同于关系数据,因此您通常不需要那么频繁的事务。想想一个用户,例如,与其相关的所有数据(偏好、地址、信用卡)都将存储在同一个文档中,这就是为什么在这种情况下通常不需要交易的原因。

但是,如果您需要同时更新多个文档,那么您可以考虑使用目前仅在 SDK 3 上可用的新事务支持 (https://www.couchbase.com/transactions)

关于spring-boot - 为 Couchbase 应用程序添加事务管理器。在用于 Junit 测试的 SpringBoot 2 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58498795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com