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"/>
但它没有用。
答案 0 :(得分:2)
c3p0中的重新连接受这些属性的控制:
hibernate.c3p0.acquireRetryAttempts=...
hibernate.c3p0.acquireRetryDelay=...
hibernate.c3p0.breakAfterAcquireFailure=...
有关详细信息,请查看c3p0手册中的this章节。
编辑:根据问题作者的评论更新详细信息。
我在现实生活应用程序中使用这些设置,该应用程序配置了两个数据库(一个是本地/只读,另一个是远程/只写)。这些c3p0设置用于只写db,因此如果连接丢失,c3p0将尝试以我想要的方式重新连接。否则,默认值是(如果我没记错的话)设置,因此重新连接非常频繁,并且会吸收大量CPU功率,并且会显着影响前端。遗憾的是,由于这些设置未在Tomcat上下文中使用,我没有其他内容可以粘贴到此处;我只是将它们放在旧式.properties
文件中。
我没有收到你对“实际程序”的评论。在数据库池设置中配置重新连接 。如果在实时事务期间丢失连接,您将获得异常(很可能是SQLException
或IOException
的子类),如果您知道这很可能,则需要自己处理,因为没有数据库池会知道你想用它做什么(重试?丢弃?推迟?)。