[英]Spring Boot and R2DBC: io.r2dbc.spi.R2dbcNonTransientResourceException: Connection validation failed
我正在使用帶有 WebFlux 和 R2DBC 的 Spring Boot 2.4.9,使用標准 Netty 服務器進行部署。 數據庫是 PostgreSQL。 應用程序中只有一個 R2DBC 存儲庫類。
R2DBC 在application.properties
中配置了以下屬性:
spring.r2dbc.username=xxx
spring.r2dbc.password=yyy
spring.r2dbc.url=r2dbc:postgresql://$host:port/database
根據文檔,連接池會自動配置,因為r2dbc:pool
在類路徑上。
使用存儲庫類時,我們偶爾會遇到此異常:
org.springframework.dao.DataAccessResourceFailureException: Failed to obtain R2DBC Connection; nested exception is io.r2dbc.spi.R2dbcNonTransientResourceException: Connection validation failed
at org.springframework.r2dbc.connection.ConnectionFactoryUtils.lambda$getConnection$0(ConnectionFactoryUtils.java:88)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ Handler com.myco.ManagementController#viewMessages() [DispatcherHandler]
|_ checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
|_ checkpoint ⇢ HTTP GET "/management/management-messages" [ExceptionHandlingWebHandler]
Stack trace:
at org.springframework.r2dbc.connection.ConnectionFactoryUtils.lambda$getConnection$0(ConnectionFactoryUtils.java:88)
at reactor.core.publisher.Mono.lambda$onErrorMap$31(Mono.java:3676)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94)
at
(堆棧中還有更多內容,但這似乎是相關的)
嵌套的io.r2dbc.spi.R2dbcNonTransientResourceException: Connection validation failed
似乎是罪魁禍首,但我已經搜索和搜索,無法弄清楚我可能做錯了什么。
如果它有幫助,應用程序確實使用了這些屬性,它們指向同一個數據庫,並且僅用於提供到 Flyway bean 的常規 JDBC 連接:
spring.datasource.username=xxx
spring.datasource.password=yyy
spring.datasource.url=jdbc:postgresql://host:port/database
以防萬一這可能會干擾 R2DBC,但我無法想象我會這樣做。
此外,似乎在應用程序服務器第一次啟動后,前 10 分鍾左右我們看不到錯誤,但之后會開始出現錯誤。 該錯誤也只是偶爾發生; 它不會一直發生。
我可以在我的工作站上重現錯誤的唯一方法是停止並重新啟動運行 PostgreSQL 的 Docker 容器,同時讓應用程序服務器一直運行。 然后我得到同樣的錯誤,但是錯誤是持久的並且每次都會發生,在我們的生產環境中,錯誤是間歇性的。
我在其他生產應用程序(但那些使用 MySQL)上使用過 Spring Boot + R2DBC 並且以前從未見過這個問題。
是什么導致了連接驗證錯誤,我該如何解決?
謝謝!
事實證明,更新 Postgres 和 R2DBC 依賴項解決了這個問題。 我替換了這個依賴:
implementation 'io.r2dbc:r2dbc-postgresql'
具有這些依賴項:
implementation 'org.postgresql:r2dbc-postgresql:0.9.0.RELEASE'
implementation 'io.r2dbc:r2dbc-pool:0.9.0.RELEASE'
implementation 'io.r2dbc:r2dbc-spi:0.9.1.RELEASE'
請注意,對於r2dbc-postgresql
依賴項,組從io.r2dbc
更改為org.postgres
。
R2DBC 池問題中的此評論特別有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.