You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java应用Oracle连接闲置断开,如何设置CONNECTION_PROPERTY_NET_KEEPALIVE属性

解决Java连接Oracle闲置后断开的保活配置方案

对应报错

IO Error: Connection reset; nested exception is java.sql.SQLRecoverableException

针对Oracle JDBC连接闲置后被断开的问题,可通过以下几种方式配置连接保活:

1. JDBC URL直接添加保活参数

在连接URL中嵌入TCP层面的保活配置,这是最直接的方式:

  • oracle.net.keepAlive=true:启用TCP连接保活机制
  • oracle.net.keepAliveInterval=30:设置保活探测间隔(单位:秒,建议小于数据库端的连接超时阈值)

示例URL:

String jdbcUrl = "jdbc:oracle:thin:@//db-host:1521/orcl?oracle.net.keepAlive=true&oracle.net.keepAliveInterval=30";

2. 连接池层面配置(以HikariCP为例)

如果使用连接池,除了JDBC参数,还需配置连接有效性校验,避免获取到已失效的连接:

  • connectionTestQuery=SELECT 1 FROM DUAL:每次从连接池获取连接前执行校验
  • keepaliveTime=30000:定期对闲置连接发起保活探测(单位:毫秒)
  • idleTimeout=1800000:设置连接闲置超时时间,自动回收长时间闲置的连接

示例代码:

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:oracle:thin:@//db-host:1521/orcl");
config.setUsername("db-user");
config.setPassword("db-pass");
config.setConnectionTestQuery("SELECT 1 FROM DUAL");
config.setKeepaliveTime(30000);
config.setIdleTimeout(1800000);
HikariDataSource dataSource = new HikariDataSource(config);

3. 通过Properties对象配置JDBC属性

也可以将保活属性封装到Properties中,再传入驱动获取连接:

Properties props = new Properties();
props.setProperty("user", "db-user");
props.setProperty("password", "db-pass");
props.setProperty("oracle.net.keepAlive", "true");
props.setProperty("oracle.net.keepAliveInterval", "30");

Connection connection = DriverManager.getConnection(jdbcUrl, props);

注意事项

  • 保活间隔需小于Oracle数据库端的SQLNET.EXPIRE_TIME参数值,否则数据库会先断开连接
  • 连接池校验与JDBC保活属性可配合使用,提升连接稳定性
  • 不同连接池的配置参数存在差异,比如Tomcat JDBC Pool需配置validationQuery和testOnBorrow参数

内容的提问来源于stack exchange,提问作者Doofenshmirtz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:40:55