【发布时间】:2018-09-10 16:16:45
【问题描述】:
所以我正在使用HikariCP 实现连接池。看起来很简单,但我有一些问题
看了一个教程,说代码应该是这样的:
Connection connection = null;
try{
connection = hikary.getConnection();
...
...
}catch(SQLException e){
e.printStackTrace()
}finally{
if(connection != null)
connection.close(); // why?
}
所以我知道我可能在问一个愚蠢的问题,但我不明白池的意义是什么,如果你每次得到一个都关闭连接?
这难道不是池化连接的全部目的吗?回收连接?
另一个问题是我假设这个hikari.getConnection() 方法是线程安全的?我有 99% 的把握,但是,我只是在我做的时候继续问。
【问题讨论】:
-
你应该真正了解try-with-resources,它会大大简化代码。请限制自己每个问题回答一个问题。
-
关于线程安全,像
DataSource这样的东西,尤其是提供连接池的数据源,被 JDBC 规范要求是线程安全的,但创建者 here is an answer HikariCP 明确表示它是线程安全的。 -
正如@MarkRotteveel 建议的那样,请使用try-with-resources。如果您始终如一地这样做,您将避免可能难以追踪的潜在连接泄漏。