【问题标题】:Java Connection Pool and try-with statements: Is Connection actually closed or returned to pool?Java Connection Pool 和 try-with 语句:连接实际上是关闭还是返回到池中?
【发布时间】:2017-09-15 07:55:12
【问题描述】:

我有一个使用 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() 关闭(我不希望发生这种情况,因为它会使我的池无用)?

【问题讨论】:

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


    【解决方案1】:

    它实际上是实际连接的包装器。 它将在幕后释放实际连接回池。进一步由池来决定实际连接是实际关闭还是重新用于新的 getConnection()。

    【讨论】:

    • 我试用了我的应用程序,但它似乎不起作用。 JVM 是如何知道我的连接是从连接池中获取的,并且它应该使用closeConnection() 而不是connection.close()
    【解决方案2】:

    池连接上的close() 将其返回到池中,无论这是由try 还是您自己的代码引起的。

    否则它不能被重用,所以它不会是一个连接池。

    【讨论】:

    • @downvoter 祈祷告诉。一个关闭的连接可重用的吗?怎么样?
    • 你误解了这个问题。这不是答案。
    • @teppic try 导致close()close() 将其返回到池中,这是 OP 所询问的。
    • @teppic OP 现在接受了一个完全相同的答案。
    猜你喜欢
    • 2023-01-25
    • 2020-03-23
    • 2014-05-05
    • 1970-01-01
    • 2011-05-19
    • 2016-05-23
    • 2017-01-31
    • 2014-05-21
    • 2011-07-07
    相关资源
    最近更新 更多