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

Spring Boot应用启动时如何执行Liquibase changelogsync完成现有数据库基线

Spring Boot启动自动执行Liquibase基线同步的实现方案

以下方案均无需引入额外组件,仅通过Spring Boot自身配置或少量扩展代码即可实现,完全对齐changelogsync命令的执行效果。


方案1:原生配置实现(推荐,Liquibase 3.8+版本支持)

Spring Boot原生集成的Liquibase已经提供了基线自动同步的配置参数,无需修改代码:

  1. 确认你的存量数据库对应的changelog最新版本号,假设为1.0
  2. 在对应环境的配置文件中新增以下配置:
spring:
  liquibase:
    # 开启自动基线功能
    baseline-on-migrate: true
    # 替换为你的存量数据库对应的changelog基线版本号
    baseline-version: 1.0
    # 基线描述,可自定义
    baseline-description: "Existing database auto baseline"
    # 原有其他liquibase配置保持不变
    change-log: classpath:db/changelog/db.changelog-master.xml

逻辑说明

当应用首次启动时,Liquibase检测到目标库不存在DATABASECHANGELOG表,会自动创建该表,并且将所有版本号小于等于baseline-version的changeSet标记为已执行,不会实际执行SQL修改存量库结构,完全符合基线同步的需求。
该配置首次执行完成后无需修改,后续新增的版本号高于baseline-version的changeSet会自动正常执行迁移


方案2:自定义扩展Bean实现(适配低版本Liquibase场景)

如果你的Liquibase版本低于3.8,没有baseline-on-migrate配置,可以通过扩展SpringLiquibase类实现自动同步:

  1. 先排除Liquibase默认自动配置
    在启动类上添加注解:
@SpringBootApplication
@EnableAutoConfiguration(exclude = LiquibaseAutoConfiguration.class)
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}
  1. 新增自定义Liquibase配置类
@Configuration
@ConfigurationProperties(prefix = "spring.liquibase")
public class CustomLiquibaseConfig {
    private DataSource dataSource;
    private String changeLog;
    private String contexts;
    private String labels;
    // 自定义配置项:是否开启首次启动自动基线同步
    private boolean syncBaselineOnFirstRun;

    @Bean
    public SpringLiquibase liquibase() {
        SpringLiquibase customLiquibase = new SpringLiquibase() {
            @Override
            protected void performUpdate(Liquibase liquibase) throws LiquibaseException {
                // 开启同步开关 + 无变更日志表 = 首次启动执行基线同步
                if (syncBaselineOnFirstRun && !liquibase.getDatabase().hasDatabaseChangeLogTable()) {
                    liquibase.changeLogSync(new Contexts(contexts), new LabelExpression(labels));
                } else {
                    // 走原生正常迁移逻辑
                    super.performUpdate(liquibase);
                }
            }
        };
        customLiquibase.setDataSource(dataSource);
        customLiquibase.setChangeLog(changeLog);
        customLiquibase.setContexts(contexts);
        customLiquibase.setLabels(labels);
        return customLiquibase;
    }

    // 省略所有属性的getter、setter方法
}
  1. 配置文件添加开关
    在需要做基线同步的环境配置中添加:
spring:
  liquibase:
    sync-baseline-on-first-run: true
    # 其他原有liquibase配置保持不变

注意:首次启动完成基线同步后,建议将sync-baseline-on-first-run改为false,避免后续误操作。


验证方式

应用启动完成后,执行SQL查询SELECT * FROM DATABASECHANGELOG,确认所有基线changeSet均已在表中存在,EXECUTETYPE字段值为EXECUTED即为同步成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:06:04