mysql - 谷歌云代理 r2dbc mysql 驱动程序在谷歌上连接 mysql 一段时间后遇到关闭的连接与错误的证书
问题描述
我正在为 MySql 编写一个带有 spring webflux 和 google r2dbc cloud sql 代理连接器的 POC。在我进行长时间的压力测试之前,一切都很顺利。大约 40 分钟左右后,由于证书错误,我不断关闭连接,因为我在连接 url 中有 useSSL=true。
即使我使用了 useSSL=false,我也遇到了这个问题。
这是我的设置:
在 Gradle 中指定对 spring boot 2.4.0 的依赖:
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-jetty'
implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive'
implementation 'com.google.cloud.sql:cloud-sql-connector-r2dbc-mysql:1.2.0'
implementation 'org.springframework:spring-aspects:5.2.8.RELEASE'
implementation 'com.zoominfo:secretutil:1.0.2'
runtimeOnly 'dev.miku:r2dbc-mysql:0.8.2.RELEASE'
runtimeOnly 'mysql:mysql-connector-java:8.0.22'
在 mySQL 配置中:
@Configuration
@EnableR2dbcRepositories(basePackages = { "com.myorg.repo" })
public class MySQLConfig {
@Bean
@Primary
public ConnectionPool connectionPool() {
String r2dbcURL = String.format("r2dbc:gcp:mysql://%s:%s@%s/%s?useSSL=true",
"username",
"password",
"project name:us-east1:host name",
"database name");
ConnectionFactory connectionFactory = ConnectionFactories.get(r2dbcURL);
ConnectionPoolConfiguration configuration =
ConnectionPoolConfiguration.builder(connectionFactory)
.maxIdleTime(Duration.ofSeconds(60))
.maxLifeTime(Duration.ofSeconds(300))
.initialSize(10)
.maxSize(20)
.maxCreateConnectionTime(Duration.ofSeconds(5))
.validationQuery("SELECT 1")
.build();
return new ConnectionPool(configuration);
}
}
大约 60 分钟后:
2020-12-16 14:46:28.149 WARN 93687 --- [ctor-tcp-nio-10] reactor.netty.channel.FluxReceive : [id: 0xedad2630, L:0.0.0.0/0.0.0.0:58027] An exception has been observed post termination, use DEBUG level to see the full stack: io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
2020-12-16 14:46:28.149 WARN 93687 --- [ctor-tcp-nio-10] d.m.r.mysql.client.ReactorNettyClient : Connection has been closed by peer
2020-12-16 14:46:28.149 ERROR 93687 --- [ctor-tcp-nio-10] reactor.core.publisher.Operators : Operator called default onErrorDropped
dev.miku.r2dbc.mysql.client.MySqlConnectionClosedException: Connection unexpectedly closed
at dev.miku.r2dbc.mysql.client.ClientExceptions.unexpectedClosed(ClientExceptions.java:32) ~[r2dbc-mysql-0.8.2.RELEASE.jar:0.8.2.RELEASE]
...
2020-12-16 14:46:28.150 ERROR 93687 --- [ctor-tcp-nio-10] d.m.r.mysql.client.ReactorNettyClient : Error: Received fatal alert: bad_certificate
javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) ~[na:na]
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) ~[na:na]
...
2020-12-16 14:46:28.150 ERROR 93687 --- [ctor-tcp-nio-10] reactor.core.publisher.Operators : Operator called default onErrorDropped
...
dev.miku.r2dbc.mysql.client.MySqlConnectionClosedException: Connection closed
at dev.miku.r2dbc.mysql.client.ClientExceptions.expectedClosed(ClientExceptions.java:36) ~[r2dbc-mysql-0.8.2.RELEASE.jar:0.8.2.RELEASE]
解决方案
推荐阅读
- angular - 对象字面量只能指定已知属性,而“设置”类型中不存在“按钮”
- mysql - 我们可以在mysql中声明游标外的程序吗
- firebase - Firebase 函数:通过函数路由每个 URL 并从“托管”服务
- c++ - c++中的辅助函数和抽象
- c# - 剃须刀页面中的NavigationManager.NavigateTo c#有时不起作用
- sql - 在 GROUP BY 中,有没有办法引用 SELECT 子句中名称与 FROM 子句中的列冲突的列?
- python-asyncio - aiokafka ProducerClosed 异步生成消息时出错
- arrays - 在 Julia 中求解 ODE 系统,初始条件为二维数组
- android - RenderScript 在 macOS Catalina (10.15) 上损坏
- vue.js - Vuetify 网格定位