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

使用Docker Compose部署Spring Boot+MySQL遇数据库连接失败求助

问题排查与解决办法

从你的项目目录结构来看,配置文件和构建产物的位置没有问题,你遇到的java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.连接失败问题,主要由以下原因导致,对应解决办法如下:

一、核心问题分析

  • MySQL服务未完全就绪就启动Spring应用:depends_on仅保证mysql-db容器先启动,但MySQL启动后还需要初始化数据库、加载系统表,这个过程需要几秒时间。Spring应用启动时直接尝试连接,此时MySQL还未准备好,就会触发重试后失败。
  • MySQL 8.0认证插件不兼容:MySQL 8.0默认使用caching_sha2_password认证插件,部分旧版本JDBC驱动或配置不当的情况下,会出现连接被拒绝的情况。
  • JDBC驱动版本过低:如果项目中使用的MySQL驱动版本过老,可能无法适配MySQL 8.0的新特性。

二、具体解决办法

办法1:让Spring等待MySQL就绪后再启动

可以通过脚本或Spring配置实现等待逻辑:

方式A:使用wait-for-it脚本

下载wait-for-it.sh脚本到项目根目录,修改Dockerfile添加等待逻辑:

FROM openjdk:17
WORKDIR /app
COPY wait-for-it.sh /app/
COPY target/smartstock-0.0.1-SNAPSHOT.jar /app/
RUN chmod +x wait-for-it.sh
CMD ["./wait-for-it.sh", "mysql-db:3306", "--", "java", "-jar", "smartstock-0.0.1-SNAPSHOT.jar"]

方式B:通过Spring配置添加重试

在application.properties中增加连接超时和重试配置:

# 延长连接超时时间
spring.datasource.hikari.connection-timeout=30000
# 允许初始化失败后持续重试,直到连接成功
spring.datasource.hikari.initialization-fail-timeout=0

办法2:修改MySQL认证插件为兼容版本

在docker-compose.yml的mysql-db服务中添加命令,强制使用旧版认证插件:

version: '3.8'
services:
  mysql-db:
    image: mysql:8.0
    container_name: mysql-container
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: inventory
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    # 强制使用兼容旧驱动的认证插件
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - "3306:3306"
  # spring-app服务配置保持不变

办法3:确认JDBC驱动版本适配

检查pom.xml中的MySQL驱动版本,确保为8.0及以上:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

你的application.properties中已经正确配置了spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver,无需修改。

关于application.properties的说明

你的观点没错:docker-compose中配置的SPRING_DATASOURCE_*环境变量会覆盖application.properties中的对应配置,当前两者内容一致,不会产生冲突。若后续出现配置不一致的情况,以环境变量为准。

内容的提问来源于stack exchange,提问作者高造擎

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:53:12