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

Java连接池和try with语句:连接实际上是关闭的还是返回到池中?,java,database-connection,connection-pooling,try-with-resources,autocloseable,Java,Database Connection,Connection Pooling,Try With Resources,Autocloseable,我有一个使用KeyedObjectPool类的jdbc连接池,我通过实现的方法openConnection()和closeConnection()使用它closeConnection()通常只返回到池的连接,并且仅当以前经常使用该连接时才将其关闭。因此,它使用了ConnectionPool.returnObject(),它不会关闭连接对象() 但是,如果我像这样使用连接池: try (Connection connection = sConnectionPool.openConnecti

我有一个使用KeyedObjectPool类的jdbc连接池,我通过实现的方法
openConnection()
closeConnection()
使用它
closeConnection()
通常只返回到池的连接,并且仅当以前经常使用该连接时才将其关闭。因此,它使用了
ConnectionPool.returnObject()
,它不会关闭连接对象()

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

    try (Connection connection = sConnectionPool.openConnection(JdbcCredentials);)
    {
        doSomething();
    }
    catch (Exception e) 
    {
       ...
    }
使用
try with
的连接对象是否仅返回到池中,或实际使用
connection.close()
关闭(我不希望发生这种情况,因为这会使池变得无用)?

close()
在池连接上返回到池中,无论这是由
引起的,请尝试
还是您自己的代码


否则它将无法重用,因此它不会是一个连接池。

它实际上是一个围绕实际连接的包装器。
它将在封盖下释放回池的实际连接。由池进一步决定实际连接是否将实际关闭或重新用于新的getConnection()。

@down。封闭连接是否可重复使用?怎么做?你误解了这个问题。这不是答案。@teppic OP的
try
会导致
close()
,而
close()
会将其返回到池中,这正是OP要问的问题。@teppic OP现在接受了一个完全相同的答案。我尝试了我的应用程序,但它似乎不起作用。JVM如何知道我的连接是从连接池中获取的,它应该使用
closeConnection()
而不是
connection.close()
    try (Connection connection = sConnectionPool.openConnection(JdbcCredentials);)
    {
        doSomething();
    }
    catch (Exception e) 
    {
       ...
    }