![](/img/trans.png)
[英]Auditing (@CreatedDate) does not work for WebFlux Spring Boot with reactive MongoDB
[英]WebFlux Spring Boot @Transactional with reactive MongoDB
WebFlux Spring Boot @Transactional
注释是否适用于反应式 MongoDB?
我将 WebFlux Spring Boot 与反应式 MongoDB 一起使用,例如:
id 'org.springframework.boot' version '2.6.7'
...
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive'
...
我标记了我的一种方法@Transactional
进行测试。 但似乎注释对我不起作用。 如果此方法内部发生错误,那么它仍会向我的 mongoDB 数据库添加一个原始数据。
import org.springframework.transaction.annotation.Transactional;
...
@Transactional
public Mono<Chat> createChat(Chat chat) {
return chatRepository
.save(chat)
.map(
c-> {
if (true) {
throw new RuntimeException();
}
return c;
});
}
我错过了什么或 Spring Boot @Transactional
注释不适用于反应式 MongoDB?
我使用 MongoDB v5.0.8
似乎响应式 MongoDB 的 Spring Data 需要显式设置一个特殊的 bean transactionManager
。 一旦我将此 bean 添加到我的反应式 MongoDB 配置中, @Transactional
注释就开始工作了。 因此,如果方法内部发生错误,我的问题中发布的示例方法不再向数据库添加新的原始数据。
这是我使用transactionManager
bean 的配置:
@Configuration
@EnableReactiveMongoRepositories
@AllArgsConstructor
public class ReactiveMongoConfiguration extends AbstractReactiveMongoConfiguration {
private final MongoProperties mongoProperties;
@Override
public MongoClient reactiveMongoClient() {
return MongoClients.create();
}
@Override
protected String getDatabaseName() {
return mongoProperties.getDatabase();
}
@Bean
ReactiveMongoTransactionManager transactionManager(ReactiveMongoDatabaseFactory reactiveMongoDatabaseFactory) {
return new ReactiveMongoTransactionManager(reactiveMongoDatabaseFactory);
}
PS 事实证明, transactionManager
bean 的定义不足以在反应式 MongoDB 中启用事务。 MongoDB 的服务器也应该配置replication
。 我遵循了这些步骤,它对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.