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它到池中。