Webflux Kotlin Coroutines Flow不返回任何结果

时间:2019-05-31 16:14:52

标签: spring-webflux kotlin-coroutines

我的Spring存储库实现了一个返回User的kotlinx.coroutines.flow.Flow的函数,但是即使我的数据库中有某些记录,该流也总是空的。

我正在使用带有Kotlin协程支持的Spring Boot 2.2.0-SNAPSHOT。我在存储库中创建了两种方法,一种用于创建用户,另一种用于列出所有用户。创建用户的工作正常,我可以在数据库中看到该用户。列出现有用户的第二个列表始终返回一个空列表,即使我的数据库中有一些记录也是如此。

我在Spring应用程序旁边使用一个PostGres 10.1 Docker实例。

完整项目可在github上找到:https://github.com/kizux/demo-spring-webflux-kotlin

这是我的存储库的方法实现:

src / main / kotlin / fr / kizux / kotlindemocoroutines / repository / UserRepository.kt

fun findAll(): Flow<User> = dbClient.select().from(TABLE_USER_NAME).asType<User>().fetch().flow()

此处理程序返回: src / main / kotlin / fr / kizux / kotlindemocoroutines / handler / UserHandler.kt

suspend fun getAll(req: ServerRequest): ServerResponse = ServerResponse.ok().bodyAndAwait(userRepo.findAll())

并路由至: src / main / kotlin / fr / kizux / kotlindemocoroutines / configuration / RouterConfig.kt

@Bean
    fun userRoutes(userHandler: UserHandler) = coRouter {
        "/user".nest {
            GET("", userHandler::getAll)
            POST("", userHandler::create)
        }
    }

我还尝试在应用程序启动时添加日志: src / main / kotlin / fr / kizux / kotlindemocoroutines / KotlinDemoCoroutinesApplication.kt

@EventListener(value = [ApplicationReadyEvent::class])
    fun init() {
        runBlocking {
            userRepo.save(User(email="j@hn.doe", signInDate=LocalDateTime.now()))
            userRepo.findAll().onEach { user -> println("Here is $user") }
        }
    }

目前我唯一得到的回报是一个空的json对象:

http://localhost:8080/user-HTTP 200 = {}

我想我应该获得更多类似的东西:

http://localhost:8080/user-HTTP 200 = {“ id”:1,“ email”:“ j@hn.doe”,“ signInDate”:“无论”}

1 个答案:

答案 0 :(得分:0)

我改变了依赖性

implementation("org.springframework.data:spring-data-r2dbc:BUILD-SNAPSHOT")

implementation("org.springframework.data:spring-data-r2dbc:1.0.0.M2")

现在就可以使用