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

Spring Boot应用无法连接Docker Compose中的PostgreSQL数据库

问题分析与修复方案

核心问题总结

从错误日志和配置文件来看,Spring Boot无法连接PostgreSQL的原因主要有三点:

  1. 数据库容器启动后未完全就绪,应用就发起连接:depends_on仅保证容器启动顺序,不会等待数据库服务真正可用。
  2. 环境变量配置存在空格问题:Docker Compose中PostgreSQL的环境变量值前带多余空格,导致实际的数据库名、用户名与Spring Boot配置不匹配,引发密码认证失败。
  3. 无效配置冗余:PostgreSQL容器中配置SPRING_DATASOURCE_URL完全多余,该配置属于Spring Boot应用,不应放在数据库容器内。

具体修复步骤

1. 修正Docker Compose配置

修改docker-compose.yml,去除环境变量值前的空格,添加健康检查确保应用仅在数据库就绪后启动:

version: "3.7"
services:
  api_service:
    build: .
    restart: always
    ports:
      - "8080:8080"
    depends_on:
      postgresql_db:
        condition: service_healthy  # 等待数据库健康检查通过
    links:
      - postgresql_db:postgresql_db

  postgresql_db:
    image: "postgres:15-alpine3.17"
    restart: always
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=java_to_dev_app_db  # 移除值前空格
      - POSTGRES_USER=java_to_dev       # 移除值前空格
      - POSTGRES_PASSWORD=              # 移除值前空格(如需密码直接填写即可)
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U java_to_dev -d java_to_dev_app_db"]
      interval: 5s
      timeout: 5s
      retries: 5

2. 确认Spring Boot配置匹配

application.properties配置基本正确,确保与PostgreSQL环境变量完全一致:

spring.datasource.url=jdbc:postgresql://postgresql_db/java_to_dev_app_db
spring.datasource.username=java_to_dev
spring.datasource.password=
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=none
spring.jpa.defer-datasource-initialization=true
spring.sql.init.mode=always
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

后续若设置密码,需保证POSTGRES_PASSWORD与spring.datasource.password完全一致,且无多余空格。

3. 可选:增强连接池鲁棒性

在application.properties中添加Hikari连接池重试配置,避免短暂就绪延迟导致启动失败:

# Hikari连接池重试配置
spring.datasource.hikari.connection-timeout=20000
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.initialization-fail-timeout=0  # 无限重试直到连接成功

4. 重新部署服务

执行命令重新构建并启动:

docker-compose down
docker-compose up --build

验证修复

启动后检查日志,确认:

  • PostgreSQL输出database system is ready to accept connections后,Spring Boot才初始化连接池
  • 无password authentication failed或CannotCreateTransactionException错误
  • 应用可正常处理请求

内容的提问来源于stack exchange,提问作者Sergey Lagutin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:04:53