程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 r2dbc 驱动程序的 Jooq 反应式获取大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 r2dbc 驱动程序的 Jooq 反应式获取?

开发过程中遇到使用 r2dbc 驱动程序的 Jooq 反应式获取的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 r2dbc 驱动程序的 Jooq 反应式获取的解决方法建议,希望对你解决使用 r2dbc 驱动程序的 Jooq 反应式获取有所启发或帮助;

我的查询看起来像(使用 JOOQ v 3.15):

    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)
    }
}

JOOQ 配置:

@Bean
fun createContext(): DSLContext {
    return DSl.using(connection)
}

其中 connectionio.r2dbc.spi.ConnectionFactory

我得到了一个例外:

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)中?

解决方法

没有测试我会说它应该

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)));
,

在被动地使用 jOOQ 时,永远不要调用任何阻塞方法,例如 ResultQuery.fetchOneInto(Class)。该方法只是 ResultQuery.fetchOne()Record.into(Class)便捷方法。没有什么可以阻止您自己调用 Record.into(Class),无论是在阻塞世界还是非阻塞世界。

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

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

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

return Mono.from {
    dsl.SELEct(
            user_CREDENTIALs.ID,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) }

大佬总结

以上是大佬教程为你收集整理的使用 r2dbc 驱动程序的 Jooq 反应式获取全部内容,希望文章能够帮你解决使用 r2dbc 驱动程序的 Jooq 反应式获取所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。