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

如何在不启动Spring Boot应用的情况下执行Liquibase迁移?

确实,Dropwizard的db migrate命令用起来特别省心——不用启动整个应用,直接就能单独执行数据库迁移。而Spring Boot官方默认是把Liquibase迁移绑定在应用启动流程里,有时候这会带来不必要的麻烦:比如本地搭建开发数据库时,我们只想跑迁移,不想处理应用启动的依赖问题或副作用。

下面给你几个可行的方案,实现类似Dropwizard的独立迁移效果:

方案1:用Spring Boot CLI直接执行

如果你已经装了Spring Boot CLI,这是最快捷的方式:

  1. 确保项目的依赖里已经包含Liquibase相关包(不管是Maven还是Gradle配置)
  2. 直接在命令行跑:
spring liquibase migrate --changeLogFile=src/main/resources/db/changelog/db.changelog-master.xml --url=jdbc:mysql://localhost:3306/your_db --username=root --password=your_pass

可以通过参数直接指定数据库连接信息,完全不用依赖应用的配置文件。

方案2:写一个独立的迁移启动类

如果不想用CLI,可以自己写一个极简的Java类,直接调用Liquibase的API执行迁移,完全脱离Spring Boot应用上下文:

import liquibase.Liquibase;
import liquibase.database.DatabaseFactory;
import liquibase.database.jvm.JdbcConnection;
import liquibase.resource.ClassLoaderResourceAccessor;
import java.sql.DriverManager;

public class StandaloneLiquibaseRunner {
    public static void main(String[] args) throws Exception {
        // 这里替换成你的数据库信息和变更日志路径
        String dbUrl = "jdbc:postgresql://localhost:5432/dev_db";
        String dbUser = "dev_user";
        String dbPass = "dev_pass";
        String changelogPath = "db/changelog/db.changelog-master.xml";

        try (var connection = DriverManager.getConnection(dbUrl, dbUser, dbPass)) {
            var database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
            var liquibase = new Liquibase(changelogPath, new ClassLoaderResourceAccessor(), database);
            
            liquibase.update(""); // 执行迁移
            System.out.println("✅ Liquibase migration finished successfully!");
        }
    }
}

编译这个类后,你可以单独运行它,或者打包成一个小JAR,执行命令大概是:

java -cp "your-classpath:liquibase-*.jar:database-driver.jar" com.yourpackage.StandaloneLiquibaseRunner

方案3:用构建工具插件(Maven/Gradle)

这也是很常用的方式,直接通过Maven或Gradle的Liquibase插件执行迁移,不用碰应用代码:

Maven配置

在pom.xml里添加Liquibase插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>4.24.0</version>
            <configuration>
                <changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile>
                <url>jdbc:mysql://localhost:3306/your_db</url>
                <username>root</username>
                <password>your_pass</password>
            </configuration>
        </plugin>
    </plugins>
</build>

然后执行命令:

mvn liquibase:update

Gradle配置

在build.gradle里添加插件:

plugins {
    id 'org.liquibase.gradle' version '2.2.0'
}

liquibase {
    activities {
        main {
            changeLogFile 'src/main/resources/db/changelog/db.changelog-master.xml'
            url 'jdbc:mysql://localhost:3306/your_db'
            username 'root'
            password 'your_pass'
        }
    }
}

执行命令:

./gradlew liquibaseUpdate

这几个方案都能让你在不启动Spring Boot应用的前提下完成Liquibase迁移,和Dropwizard的db migrate效果一致,你可以根据自己的习惯和场景选最适合的~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:31:57