如何为Apache DBCP 2连接池中的每个连接配置Socket读取超时
为Apache DBCP 2连接池配置Oracle JDBC Socket读取超时
针对你的环境(ojdbc6-11.2.0.3 + Apache DBCP 2 + Tomcat JNDI数据源),可以通过以下两种方式为每个连接配置Socket读取超时:
方法一:在JDBC URL中追加超时参数
Oracle JDBC提供oracle.net.READ_TIMEOUT参数(单位:毫秒),直接加到你的JDBC URL末尾即可:
url="jdbc:oracle:thin:@//你的数据库地址:端口/服务名?oracle.net.READ_TIMEOUT=30000"
示例中设置的是30秒超时,可根据实际业务需求调整数值。
方法二:通过DBCP2的connectionProperties属性配置
在<Resource>标签里添加connectionProperties属性,专门管理连接级别的配置项,可读性更强:
connectionProperties="oracle.net.READ_TIMEOUT=30000"
修改后的完整context.xml配置
整合后的配置示例如下:
<Resource name="A/dataSource" auth="Container" type="javax.sql.DataSource" maxActive="400" maxTotal="400" maxIdle="50" maxWait="10000" username="..." password="..." driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@//你的数据库地址:端口/服务名" connectionProperties="oracle.net.READ_TIMEOUT=30000" autoReconnect="true" removeAbandoned="true" logAbandoned="true" removeAbandonedTimeout="60" validationQuery="select 1 from dual" > </Resource>
注意要点
oracle.net.READ_TIMEOUT的作用:控制JDBC Socket从数据库读取数据的超时时间,避免连接因网络异常长时间挂起,占用连接池资源。- 版本兼容性:ojdbc6-11.2.0.3原生支持该参数,无需额外依赖或配置。
- 超时值建议:根据业务查询的最长耗时设置,过短可能中断正常查询,过长则无法及时回收异常连接。
内容的提问来源于stack exchange,提问作者Plijen
相关产品推荐
相关产品推荐

