postgres从Java重启后重新连接到postgres数据库

thr*_*ups 4 java postgresql jdbc apache-commons-dbcp

我正在使用postgres 9.1,org.apache.commons.dbcp.BasicDataSource(对于我的连接池)和Java 1.7.当我重新启动postgres服务器时,我得到了例外情况org.postgresql.util.PSQLException: FATAL: terminating connection due to administrator command.

如何使连接自动重新连接到重新启动的数据库?

Cra*_*ger 5

validationQuery根据文档,DBCP有一个连接验证查询选项.您可以将其设置为类似的内容SELECT 1;,DBCP将在返回连接之前运行该测试.

也就是说,你的应用真的应该处理这种情况.SQL查询可能由于各种原因而失败,您应该始终在具有时间退避和重试限制的重试循环中执行查询,再加上一些逻辑来确定哪些异常在重试时可恢复,哪些不是(使用SQLState)为了那个原因).

特别是,验证受竞争条件的影响,您可以在其中进行以下事件排序:

  1. 验证
  2. 传递给app的连接
  3. 服务器关闭
  4. App运行第一个声明

要么

  1. 验证
  2. 传递给app的连接
  3. App运行第一个语句,打开一个事务
  4. 服务器关闭
  5. App运行第二个声明

...因此,对于您的应用来说,保持适当的重试循环和良好的事务处理仍然很重要.

您可以从SQLException获取SQLState : SQLException.getSQLState. PostgreSQL的代码在PostgreSQL手册中.