Hikari: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();
是否还有其他任何事情可以在此连接上完成,以使其有资格在连接池中重复使用?
Autocommit
已开启。 Connection.close()
,除非在Hikari提供的时候做一些特别的事情,看起来就像我想要避免的那样。
答案 0 :(得分: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
当然应该在close()
块中调用两个finally
方法。