mysql超时后,hibernate c3p0连接断开

时间:2011-02-24 17:20:38

标签: hibernate spring tomcat jpa

我有一个奇怪的问题。我在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,我不喜欢它,也不适用于我。

任何使用jpa的人都解决了这个问题?

ps:我也尝试使用<property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>但它没有用。

有人请提前帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

c3p0中的重新连接受这些属性的控制:

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

有关详细信息,请查看c3p0手册中的this章节。

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

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

我没有收到你对“实际程序”的评论。在数据库池设置中配置重新连接 。如果在实时事务期间丢失连接,您将获得异常(很可能是SQLExceptionIOException的子类),如果您知道这很可能,则需要自己处理,因为没有数据库池会知道你想用它做什么(重试?丢弃?推迟?)。