【问题标题】:Java JDBC mysql connection pooling [duplicate]Java JDBC mysql连接池[重复]
【发布时间】: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。如果您始终如一地这样做,您将避免可能难以追踪的潜在连接泄漏。

标签: java jdbc hikaricp


【解决方案1】:

关闭它并没有真正关闭:它会将它返回到池中。

【讨论】:

    【解决方案2】:

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

    Hikari getConnection 已同步块

      // See http://en.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java
      HikariPool result = pool;
      if (result == null) {
         synchronized (this) {
    

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 1970-01-01
      • 2011-03-06
      • 2011-01-19
      • 1970-01-01
      • 2021-12-20
      • 2012-07-06
      相关资源
      最近更新 更多