您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Tomcat连接池:几种不释放连接的方法

Tomcat连接池:几种不释放连接的方法

这是对连接池的不正确使用。您永远不应调用close()未包装的连接。

使用池连接的正常流程是

之所以有效,是因为该池具有包装器类,PoolableConnection即that implements ConnectionPoolableConnection委托底层连接来执行实际工作,但是(除其他事项外)实现方式close()有所不同。这将破坏当前的PoolableConnection包装,并将底层组件返回Connection到连接池。例如。

这样,您的程序逻辑就可以从中获取连接,然后DataSource使用Connectionclose(),就像正常的非池化一样Connection

正是这种透明性使连接池易于使用。

现在,当您调用unwrapPooledConnection您就可以访问它的内部真实Connection委托。

什么 ,你 要做的就是调用close() 的委托

这有两个效果

因此,您需要非常小心。 叫close()Connection你已经从池中得到,将其返回到池中。 调用close()基础连接。

因此,您的代码应为:

try (final Connection poolConn = DataSourceConnectionPool.getConnection()) {
    final Connection conn = poolConn.unwrap(OracleConnection.class);
    //do stuff with conn
    //do not close conn!!
}
//poolConn is returned to the pool
其他 2022/1/1 18:15:48 有676人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶