org.postgresql.util.PSQLException:连接尝试失败
Posted
技术标签:
【中文标题】org.postgresql.util.PSQLException:连接尝试失败【英文标题】:org.postgresql.util.PSQLException: The connection attempt failed 【发布时间】:2013-03-26 05:23:51 【问题描述】:我正在使用带有 JDBC 连接的 java Web 服务(apache 轴)连接到 postgres 数据库以获取数据。但在大多数情况下,我突然得到一个org.postgresql.util.PSQLException: The connection attempt failed.
除外,有时它工作正常。在这里,我使用了许多准备好的语句。我的示例代码是
Connection connection=null;
try
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
ps1=connection.prepareStatement("select * from emp");
rs1=ps1.executeQuery();
while(rs1.next())
ps2=connection.prepareStatement("select * from dept where dept_no="+rs1.getInt("dept_no"));
rs2=ps2.executeQuery();
while(rs2.next())
................
................
catch(Exception e)
System.out.println("Exception occurred is"+e.getMessage());
finally
tryif(rs1!=null)rs1.close();catch(Exception e) System.out.println("*1closing error--->"+e);
tryif(ps1!=null)ps1.close();catch(Exception e) System.out.println("**1closing error--->"+e);
tryif(rs2!=null)rs2.close();catch(Exception e) System.out.println("*2closing error--->"+e);
tryif(ps2!=null)ps2.close();catch(Exception e) System.out.println("**2closing error--->"+e);
tryif(connection!=null)connection.close();catch(Exception e) System.out.println("***closing error--->"+e);
有关此异常的堆栈跟踪是
org.postgresql.util.PSQLException: The connection attempt failed.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:137)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:124)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
at org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:386)
at org.postgresql.Driver.connect(Driver.java:260)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.codon.service.WareHouseServer.get_picks(WareHouseServer.java:7415)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:135)
at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:104)
at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73)
at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:259)
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:254)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:95)
... 37 more
我检查了 postgres 日志,在不同的情况下发现了以下语句
1.WARNING:worker 启动时间过长;取消。
2.无法重新附加到共享内存(key=....,addr=.....):487。
3.无法从客户端接收数据:由于目标机器主动拒绝,无法建立连接。
4. 客户端连接出现意外的 EOF。
请帮助我。提前谢谢
【问题讨论】:
您需要显示完整异常堆栈跟踪,因为嵌套异常将包含问题的详细信息。鉴于您没有使用池连接,如果您遇到 max_connections 问题,我不会感到惊讶,但如果没有完整的错误,很难说。 您要关闭所有准备好的语句和结果集吗?在给定的示例中,关闭 ps2 和 rs2 是隐藏的 我用堆栈跟踪更新了有关异常的问题,上次我忘记发布ps2
和 rs2
结束语句。我在应用程序中做到了。
PostgreSQL 服务器版本和主机操作系统?有没有可能是 Windows 服务器?
嗨@Sasi Vara Prasad,我期待相同的postgresql日志出现同样的问题。我正在使用默认的休眠连接池。你能解决这个问题吗?
【参考方案1】:
真正的问题是:
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read
当 Java 尝试读取连接时,连接已关闭。这可能是由于:
PostgreSQL 服务器正在重启 您连接的 PostgreSQL 后端被终止 您连接到的 PostgreSQL 后端崩溃 不可靠的网络连接 行为不良的状态防火墙 NAT 防火墙/路由器的 NAT 连接表中的空闲连接超时... 可能还有更多。检查 PostgreSQL 服务器日志,看看那里是否有任何信息;还可以考虑使用 Wireshark 之类的工具进行一些网络跟踪。
【讨论】:
我用 postgres 日志文件中的语句更新了我的问题【参考方案2】:尝试 chekin Postgresql 版本,在我的情况下,我部署了我的应用程序:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.16</version>
</dependency>
但是在本地我用的是 42.2.18 并且工作正常,所以我检查版本后不知道,所以你应该尝试其他版本。
【讨论】:
【参考方案3】:为我修复:
跳到pg_hba.conf
文件并在IPV4连接下将其127.xxxx
更改为0.0.0.0/0
仔细检查:跳到postgresql.conf
并将listenaddresses
更改为*
(我确定您知道您需要先删除起始#
才能使其正常工作)
祝你好运!
【讨论】:
以上是关于org.postgresql.util.PSQLException:连接尝试失败的主要内容,如果未能解决你的问题,请参考以下文章