Java 爪哇及;Postgres多线程故障 上下文

Java 爪哇及;Postgres多线程故障 上下文,java,spring,postgresql,database-connection,Java,Spring,Postgresql,Database Connection,Spring批处理应用程序和Postgres托管在同一台服务器上 Spring批处理步骤以多线程方式运行,执行SELECT查询 Spring批处理步骤正确地执行了一段时间,然后在对Postgres执行查询时随机出现以下错误 错误 JAVA 使用更多线程可以更快地到达错误 8、6、4和2个线程出现故障 单线程运行良好 我不知道该看什么,任何帮助都将不胜感激。我发现了问题,这与本文的评论一致 已达到最大连接数 错误来自子项目,他们已将数据源从HikariCP更改为 相关文档片段: 注意:此类不

Spring批处理应用程序和Postgres托管在同一台服务器上

Spring批处理步骤以多线程方式运行,执行SELECT查询

Spring批处理步骤正确地执行了一段时间,然后在对Postgres执行查询时随机出现以下错误

错误

JAVA
  • 使用更多线程可以更快地到达错误
  • 8、6、4和2个线程出现故障
  • 单线程运行良好

我不知道该看什么,任何帮助都将不胜感激。我发现了问题,这与本文的评论一致

已达到最大连接数

错误来自子项目,他们已将数据源从HikariCP更改为

相关文档片段:

注意:此类不是实际的连接池;它实际上并没有池连接。它只是一个完整连接池的简单替代品,实现相同的标准接口,但每次调用都会创建新的连接


解决方案是切换回HikariCP。

您是否达到了最大连接限制?如果您不知道,那么作为一个实验,将其增加到1000,看看行为是否发生了变化。@404值得一试,但我不知道如何使用8个活动线程达到100个连接。这取决于如何控制连接生命周期。您是否自己创建连接?它们是否得到妥善处理?如果这不是一个连接限制问题,那么我真的想不出一个好的理由。pg是在本地运行还是在另一台服务器上运行?我在本地pg服务器上做过非常高的负载,从来没有出现过这个问题。可能还值得检查pg日志文件,以查看当时是否记录了任何错误。
2021-04-29 20:57:31.974 [SimpleAsyncTaskExecutor-1] ERROR org.springframework.batch.core.step.AbstractStep - Encountered an error executing step ECIP_TN in job ECIP_tom_JOB
com.lit.tom.core.exception.ApplicationException: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.postgresql.util.PSQLException: Connection to 127.0.0.1:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
        at com.lit.tom.core.driver.retriever.sql.SqlRetriever.getData(SqlRetriever.java:98) ~[tom-engine-1.2.11-SNAPSHOT.jar!/:1.2.11-SNAPSHOT]
        at com.lit.tom.core.driver.retriever.LegacyDataRetriever.retrieveLegacyRecords(LegacyDataRetriever.java:48) ~[tom-engine-1.2.11-SNAPSHOT.jar!/:1.2.11-SNAPSHOT]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_292]
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.postgresql.util.PSQLException: Connection to 127.0.0.1:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82) ~[spring-jdbc-5.2.13.RELEASE.jar!/:5.2.13.RELEASE]
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:371) ~[spring-jdbc-5.2.13.RELEASE.jar!/:5.2.13.RELEASE]
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:452) ~[spring-jdbc-5.2.13.RELEASE.jar!/:5.2.13.RELEASE]
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:462) ~[spring-jdbc-5.2.13.RELEASE.jar!/:5.2.13.RELEASE]
        at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:490) ~[spring-jdbc-5.2.13.RELEASE.jar!/:5.2.13.RELEASE]
        at com.lit.tom.core.driver.retriever.sql.SqlRetriever.getData(SqlRetriever.java:59) ~[tom-engine-1.2.11-SNAPSHOT.jar!/:1.2.11-SNAPSHOT]
        ... 78 more
Caused by: org.postgresql.util.PSQLException: Connection to 127.0.0.1:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:303) ~[postgresql-42.2.19.jar!/:42.2.19]
        at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) ~[postgresql-42.2.19.jar!/:42.2.19]
        at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:223) ~[postgresql-42.2.19.jar!/:42.2.19]
        at org.postgresql.Driver.makeConnection(Driver.java:465) ~[postgresql-42.2.19.jar!/:42.2.19]
        at org.postgresql.Driver.connect(Driver.java:264) ~[postgresql-42.2.19.jar!/:42.2.19]

        ... 78 more
Caused by: java.net.ConnectException: Cannot assign requested address (connect failed)
        at java.net.PlainSocketImpl.socketConnect(Native Method) ~[?:1.8.0_292]
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[?:1.8.0_292]
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[?:1.8.0_292]
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[?:1.8.0_292]
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[?:1.8.0_292]
        at java.net.Socket.connect(Socket.java:607) ~[?:1.8.0_292]
#Relevant postgres configuration
#listen_addresses = 'localhost'
max_connections = 100
port = 5432