问题标签 [r2dbc-postgresql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
326 浏览

join - 如何在 Spring Webflux(IntelliJ)(Postgres 数据库)中加入(替代 Mapping)多个表?

如何在 Spring WebFlux 中为关系数据库连接多个表?

在 Spring Boot 中,为了连接两个表,我们可以执行不同的映射(@OneToOne、@ManyToOne、@OneToMany)。下面显示了一个示例,用于医生和患者之间的映射。

医生类(实体)

患者类别(实体)

对于 Spring Webflux,我创建了如下所示的两个表(postgresSQL),它们各自的存储库、一个处理程序和一个 IntelliJ 中的路由器。如何在 Spring Webflux 中编写上述代码,因为我们不能在那里使用 @Entity 或任何映射注释?

医生桌

病人桌

0 投票
1 回答
630 浏览

java - r2dbc-pool 连接取消后未释放

我对 R2DBC 池有一个奇怪的行为:我们碰巧创建了大量线程并将它们发送到 R2DBC 池以获取数据库连接。当池中的所有 R2DBC 连接都在使用中时,我们创建的线程排队等待空闲连接可用,这在之前使用的连接被释放时发生。如果我们在等待空闲连接时取消这些线程,则会发生以下行为:

  • 即使它们被取消,一些线程也会获得一个连接并通过它们的正常 DB 进程
  • 最重要的是:某些连接被获取并且永远不会被释放,即使所有线程都被取消并且不再处于活动状态。

因此,一些连接不会回到空闲状态。它们保持被获取并阻止后续连接请求获取这些特定连接。在我们重新启动服务之前,连接保持锁定状态。

值得一提的是,我们在获取连接时对数据库进行了查询(我们有一个多租户数据库,并在获取连接时使用 SET SCHEMA 来选择正确的租户)。

我做了一个程序来重现这个问题。

为了进行测试,我使用了一个带有maxConnection=2的池。在调用了几次测试方法(controller.test)之后,池中的一些连接仍然被无限期地获取(它们应该都被onCancel或 Spring 处理的close语句释放)。这可以通过使用 jmx 来监控池很容易地证明。

我想取消请求会传播到connectionPool.create(),但是某些迭代似乎有足够的时间在收到取消之前结束 preQuery,这导致连接可供 Spring 使用。在这些情况下,在TestConnectionFactory中看不到取消,并且大约 1/3 次,Spring 不调用connection.close,导致保持获取连接。

我们将org.springframework.boot 2.3.5.RELEASEio.r2dbc:r2dbc-postgresqlio.r2dbc:r2dbc-pool 一起使用

我们尝试升级到io.r2dbc:r2dbc-postgresql 0.8.8.RELEASEio.r2dbc:r2dbc-pool 0.9.0.M1但结果保持不变。

0 投票
0 回答
22 浏览

spring-boot - R2dbcRepository 无返回

我正在尝试从我UserRepository的扩展中获取数据,R2dbcRepository如下面的代码

这个存储库在保存实例时工作正常,但是当我调用方法UserEntity时它不起作用。我在订阅调试之前findByEmail编写了一个测试,如下面的代码:log()

但在控制台上,它没有显示,onComplete甚至onNext不像普通发布者应该显示的那样。相反,它只显示此消息:

当然,我的数据库中有具有该电子邮件名称的数据: 桌子

有没有我错过的步骤?谢谢!

0 投票
0 回答
91 浏览

spring-data-r2dbc - r2dbc 连接端口添加了两次(无法连接到 db_app:5432:5432)而 jdbc 很好?

这是我的 docker-compose.yml的摘录:

并且在启动期间后端显示以下异常(但继续运行!):

我特别想知道Cannot connect to db_app:5432:5432,因为端口似乎被添加了两次?有趣的是,当我在启动时为 flyway 迁移添加 jdbc 连接时,它工作正常并且迁移被执行:

当我将 R2DBC URI 更改为以下内容时,它可以正常工作:

但我不明白为什么?所以,我的问题是添加“附加”端口的位置以及为什么行为与 JDBC 不同?


springBoot 版本 2.5.1

0 投票
0 回答
79 浏览

spring-data-r2dbc - 在哪里可以找到 r2dbc 指标的文档?

我在哪里可以找到 r2dbc 指标的深入描述?

具体来说,我试图了解这些到底代表什么:

0 投票
0 回答
138 浏览

java - Spring Data R2DBC - 使用字符串数组构建自定义 postgresql 查询

我使用 R2DBC 存储库:

我需要为 postgres 创建自定义查询,例如"select * from stocks where title like any (array['%1%', '%2%', '%3%']);"

我将 String[] arr 发送到存储库;

在我的存储库中:

我需要在查询中写什么而不是“什么”?

我试过@Query("select * from stock where title like any (array[:#{#arr}])") 但收到错误:

0 投票
0 回答
46 浏览

spring-webflux - Spring R2dbc:有没有办法从 postgresql 数据库中获取恒定流并处理它们?

我想获取 postgresql 表中新创建记录的记录作为实时/连续流。是否可以使用spring r2dbc?如果是这样,我有什么选择?

谢谢

0 投票
0 回答
22 浏览

kotlin - 尝试使用 r2dbc 选择最大值导致 NullPointerException: data

这是我正在使用的代码:

当表为空(或查询不返回结果)时,它会抛出 NullPointerException: data,这不是一个非常有用的异常/错误消息。

这显然是由于查询没有返回任何结果造成的,但是从数据库中读取对象时,类似的查询不会失败,如果没有的话。

任何帮助将不胜感激。谢谢。

0 投票
0 回答
242 浏览

spring-boot - Spring Boot 和 R2DBC:io.r2dbc.spi.R2dbcNonTransientResourceException:连接验证失败

我正在使用带有 WebFlux 和 R2DBC 的 Spring Boot 2.4.9,使用标准 Netty 服务器进行部署。数据库是 PostgreSQL。应用程序中只有一个 R2DBC 存储库类。

R2DBC 配置application.properties有以下属性:

根据文档,连接池是自动配置的,因为r2dbc:pool它位于类路径上。

使用存储库类时,我们偶尔会遇到此异常:

(堆栈中还有更多内容,但这似乎是相关的)

嵌套io.r2dbc.spi.R2dbcNonTransientResourceException: Connection validation failed似乎是罪魁祸首,但我已经搜索和搜索,无法弄清楚我可能做错了什么。

如果它有帮助的话,应用程序确实使用了这些属性,它们指向同一个数据库,并且仅用于提供到 Flyway bean 的常规 JDBC 连接:

以防万一这可能会干扰 R2DBC,但我无法想象我会这样做。

此外,似乎在应用程序服务器第一次启动后,前 10 分钟左右我们看不到错误,但之后会开始出现错误。该错误也只是偶尔发生;它不会一直发生。

我可以在我的工作站上重现错误的唯一方法是停止并重新启动运行 PostgreSQL 的 Docker 容器,同时让应用程序服务器一直运行。然后我得到同样的错误,但是错误是持久的并且每次都会发生,在我们的生产环境中,错误是间歇性的。

我在其他生产应用程序(但那些使用 MySQL)上使用过 Spring Boot + R2DBC 并且以前从未见过这个问题。

是什么导致了连接验证错误,我该如何解决?

谢谢!

0 投票
1 回答
124 浏览

spring-data - Spring r2dbc 数据库连接的瓶颈是什么?

我已经使用 spring boot、webflux 和 r2dbc设置了一个示例项目。我已经能够将行从 postgres db 表流式传输到客户端。

此服务器实现(用于存储查询结果)是否存在内存瓶颈?行是否流过?

PS我并没有声称任何质量水平,我知道分页等将是必不可少的,只是想知道数据库查询如何与反应框架交互。