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

GitHub CI中SpringBoot测试无法连接数据库求助

可能的问题及解决方案

1. MySQL服务端口已开放但未完成初始化

wait-for工具仅检测端口是否可连接,但MySQL 5.5启动后需要额外时间完成数据库创建、用户权限配置等初始化操作,此时端口通了但无法处理实际的数据库连接请求。

解决方法:
先在CI步骤中安装MySQL客户端,再用客户端命令验证数据库就绪状态:

# 新增安装步骤
- name: Install MySQL client
  run: sudo apt-get update && sudo apt-get install -y mysql-client

# 修改等待步骤
- name: Wait for the database to start
  run: wget -qO- https://raw.githubusercontent.com/eficode/wait-for/$WAIT_FOR_VERSION/wait-for | sh -s -- localhost:55001 -- mysql -h localhost -P 55001 -u root -pmy-secret-pw -e "SELECT 1" && echo "Database is up"
  env:
    WAIT_FOR_VERSION: 4df3f9262d84cab0039c07bf861045fbb3c20ab7 # v2.2.3

2. JDBC驱动与MySQL版本不兼容

你使用的com.mysql.cj.jdbc.Driver是MySQL 8.0及以上版本的专属驱动,与MySQL 5.5不兼容,会直接导致连接失败。

解决方法:

  • 更新测试环境配置文件test/resources/application.yml:
spring:
  datasource:
    url: jdbc:mysql://localhost:55001/dbTest
    username: root
    password: my-secret-pw
    driver-class-name: com.mysql.jdbc.Driver
  • 调整Gradle依赖中的MySQL驱动版本,适配MySQL 5.5:
testImplementation 'mysql:mysql-connector-java:5.1.49'

3. Docker Compose配置冗余导致权限异常

你的docker-compose-test.yaml中同时设置了MYSQL_ROOT_PASSWORD和MYSQL_USER=root,这会触发MySQL创建重复的root用户,引发权限验证问题。

解决方法:
删除冗余的用户配置项:

services:
  db-test-database:
    image: mysql:5.5
    ports:
      - "55001:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=my-secret-pw
      - MYSQL_DATABASE=dbTest

4. 端口映射延迟(临时验证方案)

在GitHub Actions的Ubuntu runner环境中,Docker端口映射可能存在微小延迟,即使端口检测通过,数据库服务仍未完全就绪。

解决方法:
在等待步骤后添加休眠时间:

- name: Wait for database initialization
  run: sleep 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:46:14