2010-03-30 130 views
4

我在Tomcat中有一个DBCP连接池。问题在于,当连接短暂中断时,应用程序被中断,因为在有连接时,DBCP不会再尝试重新连接。我可以让DBCP自动重新连接吗?自动重新连接数据库连接

+0

可以肯定的是,当你获得它时,你是否在'try'块的'finally'块中调用'connection.close()'?到处? *真的吗?*是的? – BalusC 2010-03-30 20:37:32

回答

4

有2种方式来“解决”这个,虽然双方有一些问题:

  1. 您可以使用“validationQuery”(见下文),在出发前有一个测试运行查询(一般的东西。像“中选择1从双”,这将被用来测试连接前/你后/让他们到游泳池这增加了每从池中连接请求额外的呼叫请参阅:http://wiki.apache.org/commons/DBCP

  2. 而不是每个查询,你可以通过设置testWhileIdle来实现idleEvictorThread,尽管在某些版本中线程会在高负载下导致死锁。请参阅:http://commons.apache.org/dbcp/configuration.html关于更多的细节和其他选项

1

不要以为DBCP这样做,但BoneCP(http://jolbox.com)可以被配置为当DB或网络出现故障时自动重播任何事务。它对您的应用程序完全透明。

+1

如何配置? – 2011-08-25 14:03:55

+1

查看transactionReplay功能。不要在Hibernate中使用它(它们有bug) – wwadge 2011-09-12 15:35:52