Java JDBC mysql连接池

Java JDBC mysql连接池,java,jdbc,hikaricp,Java,Jdbc,Hikaricp,因此,我正在使用实现连接池。这似乎很简单,但我有一些问题 我看了一篇教程,说代码应该是这样的: Connection connection = null; try{ connection = hikary.getConnection(); ... ... }catch(SQLException e){ e.printStackTrace() }finally{ if(connection != null) connection.close(); // why?

因此,我正在使用实现连接池。这似乎很简单,但我有一些问题

我看了一篇教程,说代码应该是这样的:

Connection connection = null;
try{
   connection = hikary.getConnection();
   ...
   ...
}catch(SQLException e){
  e.printStackTrace()
}finally{
  if(connection != null)
     connection.close(); // why?
}
所以我知道我可能在问一个愚蠢的问题,但我不明白共享的意义是什么,如果你每次都要关闭连接的话

这不是共享连接的全部目的吗?回收连接


另一个问题是,我假设这个
hikari.getConnection()
方法是线程安全的?我99%肯定是这样,但是,我只是边做边问。

Hikari使用自己的机制包装关闭连接(以及对连接的操作),在您根据其属性设置时处理活动/空闲连接的连接池

Hikari拥有同步块


Hikari使用自己的机制包装close connection(和连接上的操作),在您通过其属性进行设置时处理活动/空闲连接的连接池

Hikari拥有同步块


关闭它不会真正关闭:它会将其返回到池。

关闭它不会真正关闭:它会将其返回到池。

您应该真正了解它,它会大大简化代码。请限制自己每个问题只回答一个问题。关于线程安全,JDBC规范要求像
数据源
,特别是提供连接池的数据源是线程安全的,但HikariCP的创建者明确指出它是线程安全的。正如@markrotVeel所建议的,请使用try with资源。如果您坚持这样做,您将避免可能难以追踪的潜在连接泄漏。您应该真正了解,这将大大简化代码。请限制自己每个问题只回答一个问题。关于线程安全,JDBC规范要求像
数据源
,特别是提供连接池的数据源是线程安全的,但HikariCP的创建者明确指出它是线程安全的。正如@markrotVeel所建议的,请使用try with资源。如果您坚持这样做,您将避免可能难以追踪的潜在连接泄漏。
  // See http://en.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java
  HikariPool result = pool;
  if (result == null) {
     synchronized (this) {