【发布时间】:2015-02-17 23:22:30
【问题描述】:
Spring Boot 应用程序使用此处描述的配置设置与 D1 Google CloudSQL Server 通信时遇到间歇性连接错误HikariCP MySQL settings
我想知道是否有人以前遇到过这种情况。
我已阅读此处发布的常见问题解答 Hikari FAQ,我想知道我的默认 idleTimeout 和 maxLifeTime(30 分钟)设置是否有问题;服务器上的wait_timeout和interactive_timeout都设置为默认28800s(8小时)。
FAQ 说这两个设置应该比服务器设置少大约一分钟,但如果我在 30 分钟后失去连接,我不太明白将 maxLifeTime 提高到 7hrs 59mins 会如何改善这种情况.
有人有什么建议吗?
编辑的堆栈跟踪:
不时获取这些
org.springframework.security.authentication.InternalAuthenticationServiceException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Timeout after 30018ms of waiting for a connection.
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:110)
at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:132)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:177)
...
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Timeout after 30023ms of waiting for a connection.
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
....
Caused by: java.sql.SQLException: Timeout after 30023ms of waiting for a connection.
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:208)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:108)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
... 59 common frames omitted
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:630)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:695)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:727)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:737)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:787)
休眠搜索:
2015-02-17 10:34:17.090 INFO 1 --- [ entityloader-2] o.h.s.i.SimpleIndexingProgressMonitor : HSEARCH000030: 31050 documents indexed in 1147865 ms
2015-02-17 10:34:17.090 INFO 1 --- [ entityloader-2] o.h.s.i.SimpleIndexingProgressMonitor : HSEARCH000031: Indexing speed: 27.050219 documents/second; progress: 99.89%
2015-02-17 10:41:59.917 WARN 1 --- [ntifierloader-1] com.zaxxer.hikari.proxy.ConnectionProxy : Connection com.mysql.jdbc.JDBC4Connection@372f2018 (HikariPool-0) marked as broken because of SQLSTATE(08S01), ErrorCode(0).
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 1,611,087 milliseconds ago. The last packet sent successfully to the server was 927,899 milliseconds ago.
目前我认为索引不是特别快,因为我没有使用预测。执行该过程大约需要 30 分钟。
谢谢
【问题讨论】:
-
您收到的具体异常(消息)是什么? maxLifeTime 应该至少比服务器端超时少 1 分钟。另一个问题是,您是在 在 Connection 上执行(多个)语句的中间,还是在池中的 Connection 上执行的 first 语句中遇到这些错误?
-
感谢您回复我。我发布了一些经过编辑的堆栈跟踪,可能会以某种方式回答您的问题。我遇到间歇性连接超时,并且在 Hibernate 搜索索引结束时出现链接故障。
-
我还注意到,在一个可能相关的注释中,当我使用 MySQL Workbench 连接到实例时,连接会在几个小时内断开。