我有一个使用KeyedObjectPool类的jdbc连接池,并通过实现的方法openConnection()和closeConnection()使用它。closeConnection()通常只是将连接返回到池,并仅在以前经常使用的情况下才关闭它。因此,它使用不关闭连接对象(see here)的ConnectionPool.returnObject()。
class ConnectionPool
{
public openConnection(...)
{
...
}
public closeConnection()
{
...
}
}但是,如果我像这样使用连接池:
try (Connection connection = sConnectionPool.openConnection(JdbcCredentials);)
{
doSomething();
}
catch (Exception e)
{
...
}使用try-with的连接对象是只返回到池中,还是实际上用connection.close()关闭了(我不希望发生这种情况,因为它会使我的池变得无用)?
发布于 2017-09-15 18:23:49
它实际上是实际连接的包装器。它将在幕后将实际的连接释放回池。进一步由池来决定实际的连接是实际关闭还是重用于新的getConnection()。
发布于 2017-09-15 17:53:15
池连接上的close()会将其返回到池中,而不管这是由try还是您自己的代码引起的。
否则它就不能重用,所以它不是一个连接池。
https://stackoverflow.com/questions/46234523
复制相似问题