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
文件中。
我没有得到关于“实际程序”的评论部分。重新连接在数据库池设置中配置为。如果您在实时交易期间失去连接,您将得到一个异常(很可能是SQLException
或IOException
的子类),如果您知道这很可能,那么您需要自己处理此问题,因为没有数据库池会知道您想如何处理它(重试?丢弃?推迟?)。
你有没有工作的例子?你发布的答案只处理c3p0的尝试,而不是我猜测的实际程序。通过发布答案让我知道我是否错了。阅读文件以检查其他可能性.... – Ikthiander 2011-02-25 09:54:15