hibernate c3p0连接中断后mysql超时

问题描述:

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

C3P0在JPA:

 <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的=真在URL的末尾,我不喜欢它,它没有工作?对我来说也是。

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

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

有人请帮忙,提前致谢。

重新连接在C3P0由这些属性决定:

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

看一看this章C3P0手册中的更多细节。

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

我在具有两个数据库(一个本地/只读和另一个远程/只写)配置的真实世界生活应用程序上使用这些设置。这些c3p0设置用于只写数据库,因此如果连接丢失,c3p0将尝试以我想要的方式重新连接。否则,默认设置是(如果我没有记错的话)设置,这样重新连接的频率就会很高,并且会占用大量的CPU能量,并且会显着影响前端。遗憾的是,我没有别的东西可以粘贴在这里,因为这些设置并未在Tomcat环境中使用。我只是将它们放在旧式.properties文件中。

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

+0

你有没有工作的例子?你发布的答案只处理c3p0的尝试,而不是我猜测的实际程序。通过发布答案让我知道我是否错了。阅读文件以检查其他可能性.... – Ikthiander 2011-02-25 09:54:15