开发者社区> 问答> 正文

Druid: Skip not validate connection.

应用使用了Druid去链接Oracle数据库,奇怪的事情发生了:应用在一段不活跃的时间之后(即在这段时间内没有访问这个应用),再次访问应用时,后台dblog显示:

2016-02-26 14:06:34.306 DEBUG http-bio-9002-exec-9 org.apache.ibatis.transaction.jdbc.JdbcTransaction 132 openConnection - Opening JDBC Connection... 2016-02-26 14:22:09.620 DEBUG http-bio-9002-exec-9 com.alibaba.druid.support.logging.Log4j2Impl 63 debug - skip not validate connection. 2016-02-26 14:22:09.750 DEBUG http-bio-9002-exec-9 org.apache.ibatis.transaction.jdbc.JdbcTransaction 137 openConnection - JDBC connection is [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@47254e47]

要过很长时间才能重新链接到db,难道防火墙在超过一定的时间之后,会自动断开链接?

原提问者GitHub用户triffic-tang

展开
收起
山海行 2023-07-05 22:01:16 586 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在使用Druid连接Oracle数据库时,长时间不活跃时自动断开连接的问题可能是由于Oracle数据库的TCP/IP超时设置导致的。TCP/IP超时设置是指在一段时间内没有数据传输时,系统会自动断开TCP/IP连接,以避免无意义的连接占用资源。

    在Oracle数据库中,默认的TCP/IP超时设置比较短,通常为2小时左右。如果应用程序长时间不活跃,超过了TCP/IP超时设置的时间,数据库会自动断开连接,从而导致应用程序无法访问数据库。

    为了解决这个问题,可以尝试调整Oracle数据库的TCP/IP超时设置。具体来说,可以通过修改SQLNET.ORA文件中的TCP.INVITED_NODES参数来调整TCP/IP超时设置。

    2023-07-29 23:16:06
    赞同 展开评论 打赏
  • 问题已经变相解决了。回复一下,让后来者有个参考。 环境是:oracle 11g + tomcat8.35.2 + druid1.1.10 + jfinal-java8-3.4,linux CentOS 6.5。

    反复尝试改变 druid 的参数(初始连接池大小、最小空闲连接数、连接等待超时的时间、指定每个连接上PSCache的大小)都不成。

    最后,写了一个轮循,每分钟执行 select 1 from dual; SQL 语句,使其保持有效连接,观察了 1 天没有问题。

    话说,druid 在新申请连接时检查是否有效,那么再检查空闲连接时,也检查一下是否有效,是不是就解决了这个问题呢?免的开发者再写一个轮循了。

    原回答者GitHub用户yufeng217

    2023-07-06 12:59:04
    赞同 展开评论 打赏
  • Druid连接池默认情况下会对连接进行验证,以确保连接的有效性。当连接空闲一段时间后重新使用时,Druid会尝试验证连接的有效性。在验证连接的过程中,如果连接已经被数据库服务器断开或者连接超时,Druid会关闭该连接,并从连接池中移除。

    在您的情况下,后台dblog显示"skip not validate connection",意味着Druid连接池在验证连接时发现连接已经被关闭或超时,但是由于配置了跳过验证,所以没有进行连接验证的操作。

    在默认情况下,Druid连接池会使用testWhileIdle参数来控制连接的验证行为。如果设置为true(默认值),则在连接空闲时会进行验证。您可以检查Druid连接池的配置,查看该参数的值。

    另外,防火墙或其他网络设备可能对连接进行了超时设置,当连接空闲时间超过该设定时间时,网络设备可能会主动关闭连接。这可能是导致长时间不活跃后重新访问时连接无法建立的原因之一。您可以与网络团队或系统管理员联系,了解是否有这样的超时设置。

    为了解决这个问题,您可以尝试以下方法:

    1. 调整Druid连接池的配置,确保testWhileIdle参数设置为true,以便在连接空闲时进行验证。

    2. 检查防火墙或其他网络设备的配置,了解是否有连接超时的设置,并与相关团队协商调整。

    3. 考虑在应用程序中增加定时任务或定时操作,以保持连接的活跃状态,避免长时间不活跃导致连接被关闭。

    2023-07-06 09:16:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载