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

时间:2016-08-30 22:09:44

标签: jdbc hikaricp

Hikari:2.4.7

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

我试图了解必须对java.sql.Connection对象做些什么才能让它在 连接池?

我刚刚将连接池引入到多线程应用程序中 以前站起来/拆除与每个SQL语句的连接。

在介绍Hikari之后,我注意到的是,每次尝试maximumPoolSize时都会发现 此后HikariDataSource.getConnectionconnectionTimeout而失败。所以我好像没有"发布"这种联系不知怎的。

Connection对象的典型用法是:

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

是否还有其他任何事情可以在此连接上完成,以使其有资格在连接池中重复使用?

Autocommit已开启。 Connection.close(),除非在Hikari提供的时候做一些特别的事情,看起来就像我想要避免的那样。

1 个答案:

答案 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方法。