我正在尝试将一些项目从Spring Reactor迁移到kotlin Coroutines。我有一些基于spring webflux的控制器:
@RestController
class Controller(val productRepository: ProductsRepository) {
@GetMapping("/product")
fun find(@RequestParam id: String): Mono<Product> {
return productRepository.findById(id)
}
}
此控制器使用reactive spring数据存储库:
@Repository
interface ProductsRepository : ReactiveMongoRepository<Product, String>
根据这份官方文档--https://docs.spring.io/spring/docs/5.2.0.m1/spring-framework-reference/languages.html#how-reactive-translates-to-coroutines,controller中的函数find
应该被翻译成suspend fun
,并且这个函数应该返回Product类的实例,而不是Product的reactive单包装器。大概是这样的:
@RestController
class Controller(val productRepository: ProductsRepository) {
@GetMapping("/product")
suspend fun find(@RequestParam id: String): Product {
return productRepository.findById(id)
}
}
但我的productRepository处理的是Mono和Flux,而不是挂起的函数。在那种情况下,我应该如何正确地使用spring数据抽象呢?
这可以通过有用的Kotlinx-Coroutines-Reactor
帮助库来实现,该库为项目反应堆Publisher
提供了有用的扩展方法,以帮助将Mono
或Flux
转换为kotlin Coroutines。
首先添加一个依赖项
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-reactor</artifactId>
</dependency>
(如果您使用spring-boot,您不必指定一个版本,因为它可以为您管理它)
@RestController
class Controller(val productRepository: ProductsRepository) {
@GetMapping("/product")
suspend fun find(@RequestParam id: String): Product? {
return productRepository.findById(id).awaitFirstOrNull()
}
}
WebFlux Spring Boot事务性注释是否适用于反应式MongoDB? 我将WebFlux Spring Boot与反应式MongoDB配合使用,如: 我标记了我的一个方法进行测试。但似乎注释对我不起作用。如果此方法内部发生错误,那么它仍然会向我的mongoDB数据库添加原始数据。 我是否错过了一些东西,或者Spring Boot事务性注释无法与反应式MongoDB配合使用? 我使用Mo
正在执行查询,但未得到任何结果。 路由器:-api/v1/service/appt/usr/{usr_id} 存储库代码, 从日志中查询, 项目表中的数据, 邮递员请求, 不确定这有什么问题。它不会返回记录。
我开始更多地接受反应式编程,并试图将其应用于我的典型业务问题。我经常使用的一种模式是数据库驱动类。我有一些已定义的单元类,如ActionProfile,其实例由ActionProfileManager管理,它从数据库表中创建实例并将其存储在映射中 然而,如果我想让它更具反应性,那么创建地图会打破单子。我可以做的一种方法是将映射本身设置为可观察的,并返回一个monad来为客户端查找特定的键。然而,中
问题内容: 我正在使用带有react的ES6 babel,现在对于较新版本的react,react DOM不再是它的一部分。我对以下代码的怀疑是,这是第一行吗?因为我无处需要React,但最后一行需要ReactDOM。 问题答案: 从版本开始,React 分为两个部分: React 和 ReactDOM。 您正在使用。因此,对您而言,在组件中绝对有意义。但是就React而言,尽管您不是直接使用Re
我面临的问题是,有一个服务,我必须调用,这是一个传统的Spring启动应用程序,而不是反应性的! 下面是一个示例endpoint,它接近上述遗留系统的想法: 我知道我不能用这个来实现真正的反应性善,有没有一个快乐的非阻塞和阻塞的媒介我可以在这里实现? 谢谢
如何为不支持流式处理的数据库提供反应式流 API?比如说dymodb。执行 get 调用时,dynamodb 将返回所有结果。因此,即使我将 get 调用包装在源中,如何处理来自下游阶段的背压?另外,如何实现写入 db 中的写入调用?我的水槽会是什么样子?任何关于此的指针都会有所帮助。