mysql - Micronaut 数据 MySQL 数据库连接自动重新连接不起作用
问题描述
我有以下 MySQL 数据库的连接字符串。它在启动期间工作正常,经过一段时间的空闲时间 MySQL 连接因未重新连接而断开。
我们还需要包括哪些其他属性来保持连接处于活动状态?
datasources:
default:
url: ${JDBC_URL:`jdbc:mysql://dbhost/DB?autoReconnect=true`}
driverClassName: com.mysql.cj.jdbc.Driver
username: ${JDBC_USER}
password: ${JDBC_PASSWORD}
dialect: MYSQL
错误
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: The last packet successfully received from the server was 41,608,139 milliseconds ago. The last packet sent successfully to the
server was 41,608,144 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
我在我的项目中包含了 tomcat jars。
compileOnly "io.micronaut.data:micronaut-data-processor:$micronautDataVersion"
implementation "jakarta.persistence:jakarta.persistence-api:2.2.2"
implementation "io.micronaut.data:micronaut-data-jdbc:$micronautDataVersion"
implementation "io.micronaut.configuration:micronaut-jdbc-tomcat"
解决方案
我已经添加了这些设置。它使连接保持活动状态。
datasources:
default:
pooled: true
jmxExport: true
url: ${JDBC_URL:`jdbc:mysql://dbhost/DB?autoReconnect=true`}
driverClassName: com.mysql.cj.jdbc.Driver
username: ${JDBC_USER}
password: ${JDBC_PASSWORD}
dialect: MYSQL
jmxEnabled: true
initialSize: 5
maxActive: 50
minIdle: 5
maxIdle: 25
maxWait: 10000
maxAge: 600000
timeBetweenEvictionRunsMillis: 5000
minEvictableIdleTimeMillis: 60000
validationQuery: "SELECT 1"
validationQueryTimeout: 3
validationInterval: 15000
testOnBorrow: true
testWhileIdle: true
testOnReturn: false
jdbcInterceptors: "ConnectionState;StatementCache(max=200)"
推荐阅读
- java - 使用正则表达式从字符串中删除 0 位小数
- php - 在模态关闭时运行 PHP 脚本
- python - Python 到 Excel 使用 xlxswriter:公式失败
- c# - JHipster 微服务 Web 应用程序中的不同编程语言集成
- arrays - 如何使用 IF 语句将值与 Google 表格中的数组进行比较
- python - 如何使用 mypy 和 @property 赋值?
- svn - 如何使用 Tortoise SVN 在 Windows 上使用 SVN
- python - 使用 OPENALPR、OpenCV 和 Tesseract 的摩洛哥车牌识别 (LPR)
- excel - 我在当前工作表中有 2 个命令按钮,两个都是编码的,我需要正确的编码
- r - Data.Table 有条件地操作许多列