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
相关产品推荐
相关产品推荐

