光: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提供时做一些特别的事情,否则似乎正是我想避免的事情。
我不特别知道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块中调用这两种方法。
| 归档时间: |
|
| 查看次数: |
1440 次 |
| 最近记录: |