长时间不访问后druid连接池中的连接失效导致客户端连接失败

发布于 2021-12-04 01:19:35 字数 2059 浏览 752 评论 6

@wenshao 你好,想跟你请教个问题:

druid 1.0,spring3+hibernate4

druid配置:

<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
      <property name="url" value="${druid.driver-url}" />
      <property name="username" value="${druid.user}" />
      <property name="password" value="${druid.password}" />
      <property name="initialSize" value="10" />
      <property name="minIdle" value="5" /> 
      <property name="maxActive" value="20" />
      <property name="maxWait" value="60000" />
      <property name="timeBetweenEvictionRunsMillis" value="60000" />
      <property name="minEvictableIdleTimeMillis" value="300000" />
      <property name="validationQuery" value="select 1 from dual" />
      <property name="testWhileIdle" value="true" />
      <property name="testOnBorrow" value="false" />
      <property name="testOnReturn" value="false" />
      <property name="poolPreparedStatements" value="true" />
      <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
      <property name="connectionProperties" value="config.decrypt=true" />
      <property name="filters" value="config" />
      <property name="proxyFilters">
          <list>
              <ref bean="wall-filter"/>
          </list>
      </property>
  </bean>



启动tomcat访问正常,之后不操作接近半个小时候后重新访问, tomcat输出:

14:11:57,021 DEBUG DruidDataSource:931 - skip not validate connection.
14:12:15,929 DEBUG DruidDataSource:931 - skip not validate connection.
14:12:34,834 DEBUG DruidDataSource:931 - skip not validate connection.

后客户端提示网络或者连接异常(C/S)
按照配置druid会不会检测连接的有效性的?需要怎么配置才能保证连接池的连接是有效的呢?


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

霞映澄塘 2021-12-05 06:17:56

我也遇到这个问题了,但是我们的数据库没有过防火墙。这个怎么解决

哑剧 2021-12-05 06:03:44

注意有可能是你们网络的问题,比较防火墙策略,导致长时间不活动的连接被防火墙切断了。 这方面你可以看看TCP/IP协议的三握四挥。  其实就是这个原因导致长时间空闲连接慢。

当你配置了testOnWhile=true,  JDBC厂商的实现pingDataBase会执行SELECT 'X'这种类似的语句。  当你长时间不连接时,直接用现有池中的连接向数据库服务器发送这条指令时,  数据库服务器收到后会认为这是一个新的连接握手请求(因为之前的连接因为网络问题或策略被断了),直接返回握手ack+sync, 而你的客户端还一直在傻傻等着全部数据返回,一直到超时(20秒),然后这个异常被pingDataBase方法的捕获了,所以你看不到异常,只认为连接失效了,这就导致你看不到真正的问题。 想看异常,把testWhileIdle=false即可。你会看到堆栈中有一堆 connection abort 这种错误

想挽留 2021-12-05 05:35:34

配置上检测的语句  如 oracle select 1  from dual

多彩岁月 2021-12-04 19:39:25

楼主,后来有结果吗?

北笙凉宸 2021-12-04 06:01:10

青萝楚歌 2021-12-04 03:20:15

我用0.2.26时,隔10多分钟不访问就会出现这个:connection abort: socket write error。求解

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文