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

Testcontainers集成Liquibase遇数据库/变更日志表未找到问题

Testcontainers集成SQL Server+Liquibase的数据库初始化问题

我正尝试在Java 17/Spring Boot 3.1.6项目中集成Testcontainers,使用SQL Server镜像mcr.microsoft.com/mssql/server:2017-CU12,搭配liquibase 4.25.1做数据库版本管理。为简化操作,希望用JDBC字符串方式配置,不想在测试类里显式创建/管理容器(此前项目刚从Gradle切换到Maven,同时升级了JUnit 5)。

尝试1:直接使用带数据库名的JDBC URL

最初使用的JDBC连接字符串:jdbc:tc:sqlserver:///database-name(也尝试过四个斜杠,无效果),触发报错:

liquibase.exception.DatabaseException: Database 'database-name' does not exist. Make sure that the name is entered correctly. [Failed SQL: (911) USE database-name;]

该异常由liquibase脚本抛出,移除所有USE database-name语句后测试可正常运行,但修改现有脚本不可行。

尝试2:通过TC_INITSCRIPT初始化数据库

将JDBC URL修改为:jdbc:tc:sqlserver:///database-name?TC_INITSCRIPT=file:src/test/resources/init-test.sql,其中init-test.sql的内容为:

USE master
CREATE DATABASE database-name

此时报错变为:

liquibase.exception.DatabaseException: Invalid object name 'DATABASECHANGELOG'

liquibase尝试执行变更集时无法访问内部表。

我的猜测

  • Testcontainers忽略了URL中的数据库名
  • 通过初始化脚本创建的数据库,未给liquibase使用的用户分配创建表的权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:12:38