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

Gradle配置Liquibase数据库迁移任务执行成功但表结构未变更问题求助

问题原因
  • 核心问题:自定义dbmigrate任务仅完成了Liquibase活动参数配置,没有调用Liquibase的实际迁移执行命令。Liquibase Gradle插件的迁移逻辑是由内置的update等任务提供的,仅配置参数不触发执行动作,自然不会执行数据库变更。
  • 隐性错误:schema2的changeLogFile使用单引号包裹变量$projectDir,Groovy中单引号不会插值解析变量,路径会变成字面量$projectDir/src/main/...,后续即使触发执行也会找不到changelog文件。
  • 补充排查点:如果changelog文件本身语法错误、变更集已经标记为执行过(DATABASECHANGELOG表存在对应执行记录),也会出现无变更的情况,当前场景优先解决执行逻辑缺失问题即可。
修复方案

推荐直接使用Liquibase插件内置任务,无需自定义任务,配置更规范,修改后代码如下:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.liquibase:liquibase-core:4.4.3'
        classpath "org.liquibase:liquibase-gradle-plugin:2.0.4"
        classpath 'mysql:mysql-connector-java:5.1.13'
    }
}

plugins {
    id 'java'
    id 'org.liquibase.gradle' version '2.0.4'
}

// 全局配置liquibase参数
liquibase {
    activities {
        schema1 {
            changeLogFile "$projectDir/src/main/resources/db/migrations.xml"
            url 'jdbc:mysql://localhost:3306/bmw?zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&serverTimezone=UTC'
            username 'root'
            password 'root'
            driver 'com.mysql.jdbc.Driver'
        }
        schema2 {
            // 改为双引号支持变量插值
            changeLogFile "$projectDir/src/main/resources/db/migrations.xml"
            url 'jdbc:mysql://localhost:3306/vw?zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&serverTimezone=UTC'
            username 'root'
            password 'root'
            driver 'com.mysql.jdbc.Driver'
        }
    }
    runList = 'schema1, schema2'
}

// 让build依赖插件内置的update迁移任务
build.dependsOn update

修改后执行gradlew build或gradlew update即可触发数据库迁移生效。

如果需要保留自定义dbmigrate任务,只需在配置完Liquibase参数后新增执行内置update任务的逻辑即可:

task dbmigrate {
    doLast {
        println "executing dev"
        liquibase {
            activities {
                schema1 {
                    changeLogFile "$projectDir/src/main/resources/db/migrations.xml"
                    url 'jdbc:mysql://localhost:3306/bmw?zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&serverTimezone=UTC'
                    username 'root'
                    password 'root'
                    driver 'com.mysql.jdbc.Driver'
                }
                schema2 {
                    changeLogFile "$projectDir/src/main/resources/db/migrations.xml"
                    url 'jdbc:mysql://localhost:3306/vw?zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&serverTimezone=UTC'
                    username 'root'
                    password 'root'
                    driver 'com.mysql.jdbc.Driver'
                }
            }
            runList = 'schema1, schema2'
        }
        // 新增此行主动触发迁移执行
        project.tasks.update.execute()
    }
}
build.dependsOn dbmigrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:57:03