Tomcat连接池释放连接时会关闭关联的Oracle数据库Session吗?
Tomcat JDBC连接池释放连接时的数据库Session处理
针对你的问题,核心结论是:当Tomcat JDBC连接池销毁多余空闲连接时,会主动关闭对应的Oracle数据库Session,而非等待Oracle自行关闭。具体细节如下:
连接池的"释放"分两种场景:
- 日常业务流程中,代码调用
Connection.close()(或通过Spring自动管理资源)时,连接只是归还到连接池标记为空闲状态,不会关闭数据库Session,等待后续复用。 - 流量高峰过后,当连接池内空闲连接数超过
maxIdle配置值时,连接池会主动销毁多余的空闲连接。这个销毁过程中,连接池会调用真实数据库连接的close()方法,Oracle JDBC驱动收到该调用后,会直接关闭对应的数据库Session,释放数据库端的会话资源。
- 日常业务流程中,代码调用
Oracle的会话超时机制(比如通过
PROFILE设置的IDLE_TIME)是兜底方案:只有当连接出现泄露(比如业务代码未正确归还连接到池,连接池认为该连接仍在活跃但实际已无人使用),Oracle才会在会话空闲超时后主动关闭它。这种情况属于异常场景,正常的连接池销毁流程不会依赖这个机制。补充说明:Tomcat JDBC连接池在销毁连接前,若配置了
validationQuery,会先执行校验操作,确认连接无效时也会触发关闭操作,同样会连带关闭Oracle Session。
内容的提问来源于stack exchange,提问作者Kul
相关产品推荐
相关产品推荐

