当前位置: 首页 > 知识库问答 >
问题:

使用r2dbc驱动程序的Jooq反应式抓取

韩彦君
2023-03-14
    override fun getCredentialsById(id: Long): Mono<UserCredentialsModel> {
    return Mono.from {
        dsl.select(
                USER_CREDENTIALS.ID,
                USER_CREDENTIALS.EMAIL,
                USER_CREDENTIALS.PHONE,
                USER_CREDENTIALS.LOGIN,
                USER_CREDENTIALS.PASSWORD)
            .from(USER_CREDENTIALS)
            .where(USER_CREDENTIALS.ID.eq(id))
            .and(USER_CREDENTIALS.IS_ACTIVE.eq(true))
            .fetchInto(UserCredentialsModel::class.java)
    }
}
@Bean
fun createContext(): DSLContext {
    return DSL.using(connection)
}
org.jooq.exception.DetachedException: Attempt to execute a blocking method (e.g. Query.execute() or ResultQuery.fetch()) when only an R2BDC ConnectionFactory was configured

然后,我应该如何以反应式的方式将查询结果提取到Kotlin数据类(或Java Jooq的POJO)中?

共有1个答案

屠德宇
2023-03-14

当反应性地使用jOOQ时,您永远不应该调用任何阻塞方法,例如ResultQuery.FetchoneInto(Class)。该方法只是resultquery.fetchone()record.into(Class)的方便方法。没有什么可以阻止您自己调用record.into(Class),无论是在阻塞世界还是在非阻塞世界。

因此,使用通常的反应器库方法来映射流内容:

mono.map { r -> r.into(UserCredentialsModel::class.java) }

或者,在一个完整的示例中:

return Mono.from {
    dsl.select(
            USER_CREDENTIALS.ID,
            USER_CREDENTIALS.EMAIL,
            USER_CREDENTIALS.PHONE,
            USER_CREDENTIALS.LOGIN,
            USER_CREDENTIALS.PASSWORD)
        .from(USER_CREDENTIALS)
        .where(USER_CREDENTIALS.ID.eq(id))
        .and(USER_CREDENTIALS.IS_ACTIVE.eq(true))
} .map { r -> r.into(UserCredentialsModel::class.java) }
 类似资料:
  • 可以在pom文件中使用r2dbc驱动程序生成jooq类吗。e、 g在下面的示例中,替换jdbc标记并使用r2dbc。我正在使用jooq和r2dbc,我也想在中包括jdbc。

  • 目前,我已经使用spring boot hikari连接池编写了我的项目,并使用fetchAsync方法获取结果。但根据这篇文档,反应式抓取阻止了JDBC API。 有没有可能用flux封装fetchAsync方法的CompletionStage对象并使其成为反应性的? 是否有通过连接池支持r2dbc的计划,以及时间表(如果正在进行)

  • 有人知道为什么吗?我该怎么解决?

  • 我正在开发一个多租户反应式应用程序,使用带有r2dbc驱动程序的Spring-Webflow Spring-data-r2dbc连接到Postgresql数据库。多租户部分是基于模式的:每个租户一个模式。因此,根据上下文(例如登录的用户),请求将访问数据库的特定模式。 我正在努力研究如何在r2dbc中实现这一点。理想情况下,这将是Hibernate处理MultiTenantConnectionPr

  • 由于R2DBC是反应式和非阻塞的,我想了解在简单的RESTful CRUD服务中使用R2DBC的好处 假设Spring Boot应用程序正在使用下面的存储库公开RESTful服务 从服务调用此存储库,结果需要在服务中进行转换,然后才能返回控制器。 为了访问完整的客户列表,我需要在通量上调用,这使得它阻塞并违背了使用反应组件的目的 这是否意味着在这个简单的示例中使用R2DBC没有任何好处?我错过什么

  • 我第一次使用SpringData反应式存储库。 我已经过了官方的留档,我创建了一个基本的CRUD API来使用它们。 我从H2开始,只是为了简单起见,一切都按预期进行。 当我尝试创建新实体时,一切正常: 代码非常简单(与SpringData Repositories一样): 和控制器: DTO也非常简单: 然后我在文档中检查Oracle也受支持。 我查看了Oracle驱动程序的官方文档。 确实,该