当前位置:网站首页 > 数据科学与大数据 > 正文

druid数据库连接池一直满(druid连接池满了)



在使用个人阿里云测试机,在查询实时输出日志时,看到数据库连接失败后,服务器一直在重连服务器。开始以为是遭受重复攻击,后面把服务重启后,就没有出现一直重连的情况。看以下输出日志:

2022-02-09 11:04:58.896 ERROR 16876 --- [eate-] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://47.98.67,98:1234/test?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC, errorCode 1045, state 28000

java.sql.SQLException: Access denied for user 'root'@'113.90.123.76' (using password: YES)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.1.10.jar:1.1.10]
at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218) ~[druid-1.1.10.jar:1.1.10]
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.1.10.jar:1.1.10]
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1560) ~[druid-1.1.10.jar:1.1.10]
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1623) ~[druid-1.1.10.jar:1.1.10]
at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2468) ~[druid-1.1.10.jar:1.1.10]

注意上面一直有 druid 数据库连接池的提示,这里就想到可能是 druid 连接池的问题,然后去掉 druid maven 依赖后在请求接口就不会出现重连的问题。

在上图源码找到最后一行 DruidDataSource.java:2468 定位到源码上,CreateConnectionThread 创建连接线程,看一下 CreateConnectionThread 源码:

这是一个多线程的类,而 run 方法里面设置了没有限制的 for 循环 for (;;) {}, 而日志报错定位的信息:

如果符合条件 errorCount > connectionErrorRetryAttempts && timeBetweenConnectErrorMillis > 0 会再次尝试重连,先看一下这几个参数的含义:

在 run 方法初始化时为零,每次连接失败,会自动加1

connectionErrorRetryAttempts

连接错误重试次数,默认值为 1。

timeBetweenConnectErrorMillis

连接间隔时间,单位毫秒。默认值为 500。

我们在连接数据库失败后,要不在里面 break 中断,其中有

将改 break-after-acquire-failure 设置成 true,在 application.properties 文件如下配置:

如果想多尝试连接几次,需要设置 connection-error-retry-attempts ,当 errorCount 大于 connectionErrorRetryAttempts 才会进入到 条件内,才会中断循环。在 application.properties 文件如下配置:

到此这篇druid数据库连接池一直满(druid连接池满了)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 自动驾驶数据安全问题文献(自动驾驶数据安全问题文献汇编)2024-12-26 14:27:06
  • tidb数据库教程(tidb数据类型)2024-12-26 14:27:06
  • 自动驾驶数据安全(自动驾驶数据安全白皮书)2024-12-26 14:27:06
  • sqlldr导入数据(sqlldr导入数据,报权限不足)2024-12-26 14:27:06
  • 怎么将sql文件转成表格(sql 表数据生成到文件)2024-12-26 14:27:06
  • 数据库课程名称叫什么(数据库的课程名称)2024-12-26 14:27:06
  • oracle数据库入门教程菜鸟(oracle数据库 菜鸟)2024-12-26 14:27:06
  • 大数据培训班一般多少钱一年(大数据培训费用一般多少钱)2024-12-26 14:27:06
  • 自动驾驶数据标注员是干嘛的(自动驾驶数据标注员是干嘛的工作)2024-12-26 14:27:06
  • 如何看数据库的端口号(如何看数据库的端口号是多少)2024-12-26 14:27:06
  • 全屏图片