【问题标题】:Hibernate, C3P0, Mysql Connection PoolingHibernate、C3P0、Mysql 连接池
【发布时间】:2009-12-07 14:46:30
【问题描述】:

我最近从 Apache DBCP 连接池切换到 C3P0,并查看了我的日志,发现存在连接超时问题。我过去在使用 DBCP 和 Tomcat 时没有遇到过这种情况,所以我想知道这是配置问题还是驱动程序问题。

每当我在服务器空闲一段时间后加载页面时,我都会看到一些内容没有发送(因为服务器无法获得连接或其他东西)。当我刷新页面时,所有内容都在那里。

既然我一直在使用 MySQL,有没有人推荐使用 MySQL 连接池?您对 MySQL 连接池有何体验?

沃尔特

【问题讨论】:

    标签: mysql hibernate connection-pooling c3p0 apache-commons-dbcp


    【解决方案1】:

    如果您正在使用的数据库配置为在一段时间不活动后超时连接,则它们已经关闭,因此在从池中借用时无法使用。

    如果您不能或不想重新配置数据库服务器,您可以配置 C3P0(和大多数其他连接池)以在从池中借用连接时使用测试查询来测试连接。您可以在the relevant section of the C3P0 documentation找到更多详细信息。

    编辑:当然你是对的,也有可能在 DBCP 池中配置了最大空闲时间,导致它们在超时之前被从池中删除。无论如何,使用测试查询或确保连接在超时之前从池中删除应该可以解决问题。

    【讨论】:

    • 好点 - 我将不得不看看它默认设置为什么。也许我错过了 c3p0 中的设置,而我在 dbcp 中设置了超时。
    • 我认为发生的事情是我从我认为没有被使用的 persistence.xml 中删除了配置参数。我没有在我的 jetty-env.xml 中设置它们,所以看来我删除了一个重要的配置。
    【解决方案2】:

    只是添加一个链接到另一个连接池;骨CP(http://jolbox.com);比 C3P0 和 DBCP 都快的连接池。

    与 C3P0 和 DBCP 一样,确保配置空闲连接测试以避免出现您描述的情况(可能是 MySQL 的 wait_timeout 设置启动,通常设置为 8 小时)。

    【讨论】:

    • 是的,我偶然发现了这个,不确定我是否会尝试一下。我对 C3P0 整体感到满意,尽管它没有得到维护。
    • 看看基准,C3P0 在繁重的线程负载下陷入混乱:-(
    猜你喜欢
    • 1970-01-01
    • 2022-08-09
    • 2013-08-20
    • 2017-12-01
    • 2017-06-21
    • 2012-07-06
    • 2017-10-16
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多