JDBC 连接池 (Hikari) 重用的连接生命周期

JDBC connection lifecycle for Connection Pool (Hikari) reuse

光:2.4.7

PostgreSQL JDBC 驱动程序:9.4-1201-jdbc41

我正在尝试了解必须对 java.sql.Connection 对象执行哪些操作才能使其在 连接池?

我刚刚将连接池引入到一个多线程应用程序中 之前与每个 SQL 声明建立/拆除连接。

在介绍 Hikari 之后,我注意到的是,一旦我点击 maximumPoolSize 每次尝试 此后 HikariDataSource.getConnection 将因 connectionTimeout 而失败。所以我似乎不是"releasing"这个连接。

Connection对象的典型用法是:

# omits Exception handling, parameter substitution, result evaluation. 
PreparedStatement preparedStatement = hikariDataSource.getConnection().prepareStatement(sql);
preparedStatement.executeQuery();
preparedStatement.close();

为了使它符合在连接池中重用的条件,是否需要在此连接上执行任何其他操作?

Autocommit 开启。 Connection.close(),除非在 Hikari 提供的情况下做一些特别的事情,否则这似乎正是我想要避免的事情。

我不是特别了解 Hikari,但是对于从连接池中取出的每个连接,您必须在完成后 return 该连接它。

通常这是使用 Connection.close() 完成的 - 池分发一个包装函数,其中 close() 不会物理关闭连接,仅 return 关闭它。

因此您的代码应如下所示:

Connection con = hikariDataSource.getConnection();
PreparedStatement preparedStatement = con.prepareStatement(sql);
preparedStatement.executeQuery();
preparedStatement.close();
con.close(); // this returns the connection to the pool

当然应该在finally块中调用这两个close()方法。