【问题标题】:hibernate c3p0 connection breaks after mysql timeoutmysql超时后休眠c3p0连接中断
【发布时间】:2011-02-24 17:20:37
【问题描述】:

我有一个奇怪的问题。我在tomcat上使用带有spring的hibernate jpa,同时当mysql超时时我需要重新连接数据库。

jpa 中的 c3p0:

        <property name="hibernate.c3p0.acquireIncrement" value="100" />
        <property name="hibernate.c3p0.timeout" value="10" />
        <property name="hibernate.c3p0.idle_test_period" value="10" />
        <property name="hibernate.c3p0.max_size" value="1240"/>
        <property name="hibernate.c3p0.min_size" value="50"/>
        <property name="hibernate.c3p0.preferredTestQuery" value="select 1;"/>

这会有帮助吗?::

        <property name="connection.autoReconnect" value="true"/>
        <property name="connection.autoReconnectForPools" value="true"/>
        <property name="connection.is-connection-validation-required" value="true"/>

有些人建议 ?autoReconnect=true 在 url 的末尾,我不喜欢它,它对我也不起作用。

有人用jpa解决了这个问题吗?

ps:我也尝试过使用&lt;property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/&gt;,但没用。

请有人帮忙,在此先感谢。

【问题讨论】:

    标签: hibernate spring tomcat jpa


    【解决方案1】:

    c3p0 中的重新连接受以下属性控制:

    hibernate.c3p0.acquireRetryAttempts=...
    hibernate.c3p0.acquireRetryDelay=...
    hibernate.c3p0.breakAfterAcquireFailure=...
    

    请查看 c3p0 手册中的this 章节了解更多详细信息。

    编辑:根据问题作者的评论更新详细信息。

    我在配置了两个数据库(一个本地/只读和另一个远程/只写)的现实生活应用中使用这些设置。这些 c3p0 设置用于只写数据库,因此如果连接丢失,c3p0 将尝试以我想要的方式重新连接。否则,默认设置(如果我没记错的话)设置因此重新连接非常频繁,这会消耗大量 CPU 功率,并且会明显影响前端。不幸的是,我没有其他要粘贴的内容,因为这些设置未在 Tomcat 上下文中使用;我只是将它们保存在旧式 .properties 文件中。

    我没有得到您关于“实际程序”的评论部分。重新连接在数据库池设置中配置。如果您在实时交易期间失去连接,您将得到一个异常(很可能是SQLExceptionIOException 的子类),如果您知道这很可能,您需要自己处理这个问题,因为没有数据库池会知道您在做什么想要处理它(重试?丢弃?推迟?)。

    【讨论】:

    • 您有任何工作示例吗?您发布的答案仅涉及 c3p0 的尝试,而不是我猜的实际过程。通过发布答案让我知道我是否错了。阅读文件以检查其他可能性....
    猜你喜欢
    • 2013-02-05
    • 2012-05-28
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2016-06-15
    • 1970-01-01
    • 2012-01-06
    相关资源
    最近更新 更多