Java JDBC mysql 连接池
Java JDBC mysql connection pooling
所以我正在使用 HikariCP 实现连接池。看起来很简单,但我有一些疑问
看到教程说代码应该是这样的:
Connection connection = null;
try{
connection = hikary.getConnection();
...
...
}catch(SQLException e){
e.printStackTrace()
}finally{
if(connection != null)
connection.close(); // why?
}
所以我知道我可能问了一个愚蠢的问题,但我不明白池化的意义是什么,如果你每次得到一个连接就关闭连接?
这难道不是合并连接的全部目的吗?回收连接?
另一个问题是我假设这个 hikari.getConnection()
方法是线程安全的?我 99% 确定是,但是,我只是继续问问。
Hikari 包装关闭连接(以及对连接的操作),它自己的机制处理 active/idle 连接的连接池,正如您通过其属性设置的那样。
Hikari getConnection 有同步块
// See http://en.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java
HikariPool result = pool;
if (result == null) {
synchronized (this) {
关闭它并没有真正关闭:它returns它到池中。
所以我正在使用 HikariCP 实现连接池。看起来很简单,但我有一些疑问
看到教程说代码应该是这样的:
Connection connection = null;
try{
connection = hikary.getConnection();
...
...
}catch(SQLException e){
e.printStackTrace()
}finally{
if(connection != null)
connection.close(); // why?
}
所以我知道我可能问了一个愚蠢的问题,但我不明白池化的意义是什么,如果你每次得到一个连接就关闭连接?
这难道不是合并连接的全部目的吗?回收连接?
另一个问题是我假设这个 hikari.getConnection()
方法是线程安全的?我 99% 确定是,但是,我只是继续问问。
Hikari 包装关闭连接(以及对连接的操作),它自己的机制处理 active/idle 连接的连接池,正如您通过其属性设置的那样。
Hikari getConnection 有同步块
// See http://en.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java HikariPool result = pool; if (result == null) { synchronized (this) {
关闭它并没有真正关闭:它returns它到池中。