【问题标题】:How do I properly destroy an Apache Commons DBCP Pool in Java?如何正确销毁 Java 中的 Apache Commons DBCP 池?
【发布时间】:2011-09-16 19:00:57
【问题描述】:

我想使用 PoolingDataSource 作为我的连接池(API 位于:http://commons.apache.org/dbcp/apidocs/org/apache/commons/dbcp/PoolingDataSource.html),但是当我不再需要它时,我不知道如何处理该池。如果我想连接到新数据库并且不再需要旧池中的连接怎么办?池上没有关闭方法。

【问题讨论】:

    标签: java memory-management connection-pooling apache-commons apache-commons-dbcp


    【解决方案1】:

    您不一定需要杀死这个池来创建一个新池。

    您可以使用 maxIdle、timeBetweenEvictionRunsMillis 和 minEvictableIdleTimeMillis 参数(请参阅here)管理其中的连接,以确保空闲连接在合理的时间内关闭。

    或者您可以使用这些参数以编程方式配置 GenericObjectPool,并在创建 PoolingDataSource 时使用。如果你想强制它有一个 close() 方法。

    【讨论】:

      【解决方案2】:

      很抱歉没有直接回答您的问题,但我可以建议不要使用 DBCP 吗?它有许多严重的问题,其他图书馆借鉴和改进了这些问题。

      那里有much better pools

      【讨论】:

      • 虽然相当准确;应该注意的是,自从提供此答案以来,DBCP 一直在积极维护。
      【解决方案3】:

      您使用的是哪种池?如果您使用的是 AbandonedObjectPool,那么它是 Commons Pool 的 GenericObjectPool 的子类,它有一个 close() 方法。

      【讨论】:

      • 正如我在问题中所说的,我正在使用 PoolingDataSource。我还链接到它的 API 文档。
      猜你喜欢
      • 2019-12-02
      • 2020-11-07
      • 2013-09-04
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      相关资源
      最近更新 更多