Java连接池和try-with语句:Connection实际上是关闭还是返回池?

时间:2017-09-15 07:55:12

标签: java database-connection connection-pooling try-with-resources autocloseable

我有一个使用KeyedObjectPool类的jdbc连接池,我通过实现的方法openConnection()closeConnection()使用它。 closeConnection()通常只返回与池的连接,并且只有在之前经常使用它时才关闭它。因此,它使用ConnectionPool.returnObject(),它不会关闭连接对象(see here)。

class ConnectionPool
{

public openConnection(...)
{
   ...
}

public closeConnection()
{
   ...
}
}

但是,如果我使用这样的连接池:

    try (Connection connection = sConnectionPool.openConnection(JdbcCredentials);)
    {
        doSomething();
    }
    catch (Exception e) 
    {
       ...
    }

使用try-with的连接对象是仅返回到池中还是实际以connection.close()关闭(我不想发生这种情况,因为这会使我的游泳池变得无用)?

2 个答案:

答案 0 :(得分:0)

它实际上是实际连接的包装器。 它将在封面下将实际连接释放回池中。它进一步到池,以决定实际连接是否将实际关闭或重新用于新的getConnection()。

答案 1 :(得分:-1)

无论是由close()还是您自己的代码引起的,池上连接上的

try都会将其返回到池中。

否则它将不可重用,因此它不会是连接池。