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

mar*_*ers 1 jdbc hikaricp

光:2.4.7

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

我试图了解必须对java.sql.Connection对象执行什么操作才能使其在连接池中再次可用?

我刚刚将连接池引入了一个多线程应用程序,该应用程序以前是通过每个SQL语句来建立/断开连接。

在介绍了Hikari之后,我注意到的是,一旦我击中maximumPoolSize其后每次尝试HikariDataSource.getConnection都会由于失败connectionTimeout。因此,似乎我没有以某种方式“释放”此连接。

Connection对象的典型用法是:

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

要使该连接有资格在连接池中重用,是否还需要对它进行其他处理?

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

a_h*_*ame 5

我不特别知道Hikari,但是对于从连接池中取出的每个连接,完成连接后都必须返回该连接。

通常,此操作使用以下方法完成:Connection.close()-池发出包装函数,该包装函数close()实际上不会关闭连接,而只会返回连接。

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

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

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