解决Druid连接池中出现的“discard long time none received connection”警告
本文转载自:https://developer.baidu.com/article/details/2766777
简介:在使用Druid连接池时,有时会遇到“discard long time none received connection”的警告。这个警告表明,连接池中的某个连接在空闲了很长时间后被数据库关闭,而连接池仍尝试使用这个连接。本文将介绍解决这个问题的几种方法。
在使用Druid连接池管理数据库连接时,可能会遇到一个“discard long time none received connection”的警告。这个警告通常表示,某个连接在空闲了很长时间后被数据库关闭,但连接池仍尝试使用这个连接。这种情况可能会导致应用抛出异常。为了解决这个问题,可以尝试以下几种方法:
- 调整数据库的空闲等待时间
数据库有一个参数叫做“wait_timeout”,它定义了连接在空闲状态下可以保持打开的最长时间。如果超过这个时间,数据库会自动关闭连接。MySQL的默认值是28800秒(8小时)。如果应用的业务逻辑允许,可以考虑适当增加这个值。
例如,要将wait_timeout设置为2小时,可以在MySQL配置文件(my.cnf或my.ini)中添加或修改以下行:wait_timeout = 7200
- 在Druid连接池中禁用空闲检查
Druid连接池提供了一个参数叫做“testWhileIdle”,它决定了是否在空闲时检查连接的有效性。如果将它设置为false,那么连接池将不会在空闲时主动检查连接,从而避免了这个警告。但请注意,这可能会导致其他问题,比如连接在使用时意外失效。
例如,在Druid的配置文件中添加以下行:druid:testWhileIdle=false
- 更新Druid版本
如果上述方法都不奏效,可能是由于使用的Druid版本存在已知问题。尝试更新到最新版本的Druid可能会解决这个问题。可以通过以下方式来更新:
对于Maven项目,在pom.xml文件中将Druid的依赖项更新为最新版本:<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>最新版本</version></dependency>
- 使用数据库的Ping方法来保持连接活跃
Druid提供了一个参数叫做“usePingMethod”,可以设置为true来使用数据库的Ping方法来保持连接活跃。这可以避免由于长时间空闲导致连接被数据库关闭的问题。但请注意,频繁地使用Ping方法可能会对数据库性能产生影响。
例如,在Druid的配置文件中添加以下行:druid:usePingMethod=true
浙公网安备 33010602011771号