spring boot postgres:致命:抱歉,已经有太多客户了

时间:2018-06-13 08:54:51

标签: spring postgresql spring-boot jdbc

我在我的春季启动应用程序中使用postgres作为数据库,当我运行我的应用程序时出现错误FATAL: sorry, too many clients already。我在application.yml中配置了一个连接池,但我仍有同样的问题

spring:
  jpa:
    database: postgresql
    hibernate:
      ddl-auto: update
  datasource:
    url: jdbc:postgresql://localhost:5432/sp
    username: sp
    password: admin
    continueOnError: true
    platform: dev
    tomcat:
      maxIdle: 10
      max-active: 100
      max-wait: 10000
      validationQuery: select 1
      removeAbandoned: true
      removeAbandonedTimeout: 120
      logAbandoned: true
      testOnBorrow: true
      testOnConnect: true
      testWhileIdle: true
  

2018-06-13 09:29:47.311 [错误] [主要] [logging.DirectJDKLog:181]   无法创建池的初始连接。   org.postgresql.util.PSQLException:致命:désolé,trop de clients sont   似曾相识   org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:443)     在   org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:217)     在   org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51)     在org.postgresql.jdbc.PgConnection。(PgConnection.java:215)at   org.postgresql.Driver.makeConnection(Driver.java:404)at   org.postgresql.Driver.connect(Driver.java:272)at   org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:310)     在   org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:203)     在   org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:735)     在   org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:667)     在   org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:482)     在   org.apache.tomcat.jdbc.pool.ConnectionPool。(ConnectionPool.java:154)     在   org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118)     在   org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107)     在   org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:131)

3 个答案:

答案 0 :(得分:2)

检查postgresql.conf文件中的参数 max_connections ,并在application.yml中显示连接总数

ALTER SYSTEM SET max_connections ='150';

并使用

重新启动您的实例
select pg_reload_conf();

注意:连接数取决于活动和空闲连接,在连接中设置更多数量会过度杀死进程。

答案 1 :(得分:0)

工作示例

application.yml

version: '3.6'
services:
  db:
    image: postgres
    ports:
      - 54321:5432
    environment:
      - POSTGRES_PASSWORD=myPassword
      - POSTGRES_USER=sa
      - POSTGRES_DB=testdatabase
    volumes:
      - ./src/main/resources/pg-init-scripts:/docker-entrypoint-initdb.d

resources / pg-init-scripts / connections.sql

ALTER SYSTEM SET max_connections ='1000';
select pg_reload_conf();

resources / pg-init-scripts / init.sql

-- your stuff

init文件夹中的所有脚本都将执行。

答案 2 :(得分:0)

在开发期间,我的django应用程序突然开始出现相同的错误。首先想到的是django代码正在某个地方打开一个连接,但是没有关闭它。但是,事实证明问题出在pgadmin4。每当我在pgadmin中查看一个表(只是一个简单的“视图>所有行”)时,连接数都会增加1。

要弄清楚这一点,我查看了pgadmin中的一些表,还使用测试网站向开发服务器提出了一些请求,并且在每一步之后,我都会通过以下方式检查连接数

SELECT COUNT(*) from pg_stat_activity;

要关闭来自pgadmin的连接,我必须从服务器断开pgadmin的连接,然后再次连接。因此,在更改max_connections值之前,您可能需要弄清楚哪个应用程序/程序正在打开而不是关闭连接。就我而言,事实证明没有必要更改值或实现池化机制,只是在开发过程中偶尔重新启动pgadmin。