首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Quarkus中与反应性SQL客户端一起使用JOOQ

在Quarkus中与反应性SQL客户端一起使用JOOQ
EN

Stack Overflow用户
提问于 2022-06-18 13:25:48
回答 2查看 423关注 0票数 2

我想使用Quarkus中的JOOQ来构建我的SQL (希望执行它们)。

因此,我添加了以下Quarkus JOOQ扩展

因为我想在我的项目中使用反应性PG SQL客户端,所以我在问自己,例如,JOOQ的fetch()方法是否会阻塞线程?它是否与引擎盖下的反应性vertx客户端兼容,还是使用阻塞客户端?看起来像后一个,因为它不返回未来或类似的东西。

在这种情况下,我应该只使用JOOQ来创建SQL字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-19 08:19:58

可以反应性地使用jOOQ API的哪些部分?

jOOQ的ResultQuery<R>扩展了Publisher<R>,因此您可以在任何反应流实现中放置jOOQ查询。在Publisher中有3种主要的jOOQ亚型:

从jOOQ 3.17开始,还有一种创建类型的方法。

考虑到这一点,在反应性世界中,您将永远不需要调用任何传统的jOOQ阻塞执行方法。您将始终通过一些反应性流集成隐式执行jOOQ查询。

避免对阻塞API的调用

从jOOQ 3.17开始,所有阻塞API (例如,ResultQuery.fetch()将被注释为org.jetbrains.annotations.Blocking ),因此您将得到IDE支持来警告您,您即将做一些在非阻塞上下文中可能没有意义的事情。

支持实现

要使这其中的任何一个工作,您需要为jOOQ提供一个R2DBC连接。R2DBC是一个SPI,它支持客户端库(如jOOQ和R2DBC驱动程序,如r2dbc-postgres )之间的互操作性。就像JDBC一样,它的工作方式是SPI,而不是严格意义上的API。此外,它还直接集成了通过Flow API集成在JDK 9中的反应性流SPI。

未来可能会有支持替代非阻塞驱动程序的工作,但是在添加反应性支持时,R2DBC似乎是最可互操作的选择,我确实希望Vert.x和R2DBC团队在未来能够找到更紧密合作的方法。例如,Vert.x SQL客户端没有直接实现反应性流SPI,Red似乎对在这里继续处理这个问题不太感兴趣:https://github.com/eclipse-vertx/vertx-sql-client/issues/249

因此,就目前而言,这意味着你必须:

  • 将jOOQ与R2DBC一起使用,这是jOOQ所支持的(不确定Quarkus是否会支持R2DBC,尽管我不认为它应该支持R2DBC)
  • 使用jOOQ只生成SQL并使用Vert.x运行SQL (您将失去许多类型安全性和便利性,以及对高级特性的访问,比如MULTISET,它依赖于执行查询的jOOQ )

关于反应式执行的附带说明

当然,想一想你是否真的需要做出反应是很重要的。在我个人的经验中,这主要是编程风格的问题,而不是实际的性能和/或负载需求。坚持阻塞模式和JDBC将大大简化您的日常工作,我怀疑您是否会注意到生产中的可测量的差别。

票数 5
EN

Stack Overflow用户

发布于 2022-06-19 13:45:09

我正在寻找一个解决方案来做同样的事情,我还没有测试它,但我偶然发现了这个回购:

https://github.com/jklingsporn/vertx-jooq

https://github.com/jklingsporn/quarkus-jooq-reactive-example

使用夸夸斯中的vert.x可能会有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72669626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档