一尘不染

休眠c3p0断开的管道

hibernate

我正在将c3p0和hibernate
3用于程序,该程序不断从某些源中提取数据并将其写入数据库。现在的问题是,由于某些原因,数据库可能变得不可用(在最简单的情况下:我只是将其关闭)。

如果有什么要写入数据库,则不应有任何异常-
查询应等待所有永恒,直到数据库再次可用。如果我没记错的话,这就是连接池可以为我做的事情之一:如果数据库有问题,只需重试连接-在最坏的情况下,无限即可。

但是相反,我得到了一个损坏的管道异常,有时会被拒绝连接,然后将该异常传递给我自己的代码,这不应该发生。

即使我捕获到异常,如何再次干净地重新初始化hibernate?(到目前为止,没有c3p0我只是再次建立了会话工厂,但是如果这会泄漏连接(或者这样做可以吗?),我也不会感到惊讶。)

该数据库是Virtuoso开源版本。

我的hibernate.xml.cfg c3p0配置:

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>  
<property name="hibernate.c3p0.breakAfterAcquireFailure">false</property>
<property name="hibernate.c3p0.acquireRetryAttempts">-1</property>
<property name="hibernate.c3p0.acquireRetryDelay">30000</property>
<property name="hibernate.c3p0.automaticTestTable">my_test_table</property>

<property name="hibernate.c3p0.initialPoolSize">3</property>
<property name="hibernate.c3p0.minPoolSize">3</property>
<property name="hibernate.c3p0.maxPoolSize">10</property>

顺便说一句:测试表已创建,并且我得到了大量的调试输出-因此看来它实际上是在读取配置。


阅读 297

收藏
2020-06-20

共1个答案

一尘不染

好吧,看来BoneCP实际上已经实现了这一点。可以将其设置为记录事务,并在网络或数据库出现故障时重播它:

http://jolbox.com/bonecp/downloads/site/apidocs/com/jolbox/bonecp/BoneCPConfig.html#setTransactionRecoveryEnabled(boolean)

2020-06-20