gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:44:08 24 4
gpt4 key购买 nike

我正在使用 postgres 9.1、org.apache.commons.dbcp.BasicDataSource(用于我的连接池)和 Java 1.7。当我重新启动我的 postgres 服务器时,我得到像 org.postgresql.util.PSQLException: FATAL: terminating connection due to administrator command 这样的异常。

我怎样才能使连接自动重新连接到重新启动的数据库?

最佳答案

DBCP 有一个连接验证查询选项 - validationQuery,根据 the docs .您可以将其设置为类似 SELECT 1; 的值,DBCP 将在返回连接以对其进行测试之前运行它。

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

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

  1. 验证
  2. 将连接传递给应用
  3. 服务器关闭
  4. 应用运行第一个语句

  1. 验证
  2. 将连接传递给应用
  3. 应用运行第一条语句,开启交易
  4. 服务器关闭
  5. 应用程序运行第二条语句

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

您可以从 SQLException 中获取 SQLState:SQLException.getSQLState . PostgreSQL 的代码是 in the PostgreSQL manual .

关于java - 从 Java 重新启动 postgres 后重新连接到 postgres 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16926056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com