You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HikariCP+GCP IAM认证时反复创建连接触发连接槽耗尽错误

问题

我编写了一个循环创建并关闭PostgreSQL数据库连接的程序,采用HikariCP连接池与Google Cloud IAM认证方式。程序在第6-7次循环时触发错误,若每次循环间隔5秒则第3次就报错。打印连接状态显示已成功关闭,无连接泄漏迹象,但仍出现错误:FATAL: remaining connection slots are reserved for non-replication superuser connections。

相关代码

Tester类

package Tester;

import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import InstanceCreator.InstanceCreator;

public class Tester {

    public static void main(String[] args) throws SQLException, InterruptedException {

        int i = 1;
        while (true) {
            System.out.println("Starting loop: " + i);
            i++;
            Thread.sleep(5000);
            DataSource dataSource = InstanceCreator.createConnectionPool();
            Connection connection = null;
            try {
                connection = dataSource.getConnection();

            } catch (SQLException e) {
                e.printStackTrace();
            } 
            finally {
                connection.close();
            }
        }
    }
}

InstanceCreator类

package InstanceCreator;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;

public class InstanceCreator {

      private static final String INSTANCE_CONNECTION_NAME = "mycreds";
      private static final String DB_IAM_USER = "mycreds";
      private static final String DB_NAME = "mycreds";

      public static DataSource createConnectionPool() {

        HikariConfig config = new HikariConfig();

        config.setJdbcUrl(String.format("jdbc:postgresql:///%s", DB_NAME));

        config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.postgres.SocketFactory");
        config.addDataSourceProperty("cloudSqlInstance", INSTANCE_CONNECTION_NAME);
        config.addDataSourceProperty("enableIamAuth", "true");
        config.addDataSourceProperty("user", DB_IAM_USER);
        config.addDataSourceProperty("password", "password");
        config.addDataSourceProperty("sslmode", "disable");

        return new HikariDataSource(config);
      }
    }

报错信息

Starting loop: 1
SLF4J(警告): 未找到SLF4J提供者。
SLF4J(警告): 默认使用无操作(NOP)日志实现。
SLF4J(警告): 可查看SLF4J官方文档了解更多详情。
Starting loop: 2
Starting loop: 3
Starting loop: 4
Starting loop: 5
Starting loop: 6
Starting loop: 7
Exception in thread "main" com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: FATAL: remaining connection slots are reserved for non-replication superuser connections
    at com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:596)
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:582)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:81)
    at InstanceCreator.InstanceCreator.createConnectionPool(InstanceCreator.java:27)
    at Tester.Tester.main(Tester.java:17)
Caused by: org.postgresql.util.PSQLException: FATAL: remaining connection slots are reserved for non-replication superuser connections
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2676)
    at org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2788)
    at org.postgresql.core.v3.QueryExecutorImpl.<init>(QueryExecutorImpl.java:174)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:313)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:54)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:253)
    at org.postgresql.Driver.makeConnection(Driver.java:434)
    at org.postgresql.Driver.connect(Driver.java:291)
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:121)
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364)
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206)
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476)
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561)
    ... 4 more

内容的提问来源于stack exchange,提问作者Quinn Larson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:43:16