WebFlux Spring Boot事务性注释是否适用于反应式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事务性注释无法与反应式MongoDB配合使用?
我使用MongoDB v5.0.8
反应式MongoDB的Spring数据似乎需要显式设置一个特殊的bean,即transactionManager。当我将这个bean添加到反应式MongoDB的配置中后,事务性注释就开始工作了。因此,如果方法内部发生错误,我问题中发布的示例方法不再向数据库添加新的raw。
下面是我对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);
}
P、 事实证明,定义transactionManager bean不足以在反应式MongoDB中启用事务。MongoDB的服务器也应该配置复制。我遵循这些步骤,这对我很有效。
我开始更多地接受反应式编程,并试图将其应用于我的典型业务问题。我经常使用的一种模式是数据库驱动类。我有一些已定义的单元类,如ActionProfile,其实例由ActionProfileManager管理,它从数据库表中创建实例并将其存储在映射中 然而,如果我想让它更具反应性,那么创建地图会打破单子。我可以做的一种方法是将映射本身设置为可观察的,并返回一个monad来为客户端查找特定的键。然而,中
反应式编程与在事件监听器(鼠标、键)中调用函数有何不同,因为两者都是异步事件流,那么反应式编程相对于传统事件监听器调用有何优势?
我想在我的反应式sql客户端事务中使用Kotlin协程。为了简单起见,我打算使用提供的助手函数<code>io.vertx.mutiny.sqlclient。此处文档中提到的池#withTransaction。由于传递的函数不是协程挂起函数,因此当我试图编译以下代码时,我得到了一个类似<code>的错误:挂起函数只能在协程体中调用 withTransaction的函数头如下所示 我问自己,是否还有
导航异步、非阻塞和反应性是一项非常有用的工作。。。给定2个非阻塞、无功、垂直。基于x/quarkus的微服务A和B,其中约束条件是A必须通过http与B通信。如果我想让服务保持被动(非阻塞): 我应该使用Vertex web客户端吗?文档说明它是一个异步客户机,但我假设它是vert。基于x的它也是非阻塞的吗?(我在这里区分异步和非阻塞) 任何帮助都会很好。谢谢
最近在学微服务的分布式事务,不太明白为什么在微服务这种分布式系统中,原有的单体acid会出现问题 希望大佬们可以讲一下原理和思想
我试图在Spring Boot中使用MongoDB反应性模板以反应式方式获得更新结果。 问题是更新部分不会执行,因为我没有订阅它,但我真的不知道如何使用反应性范式执行这两个操作并返回一个值。 这就是我正在尝试的: flatMap updateFirst不会发生,因为我没有订阅,但我需要返回UpdateResult,如果我订阅了,我不知道如何返回该值。