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

如何在Gradle任务中配置Liquibase执行SQL文件操作Docker内的MySQL

基于Liquibase + Gradle 实现Docker MySQL自动执行SQL的配置步骤

1. 引入Liquibase Gradle插件

首先在项目根目录的build.gradle文件中添加插件声明和依赖:

plugins {
    id 'java'
    // 引入Liquibase Gradle插件,版本可根据需要调整
    id 'org.liquibase.gradle' version '2.2.0'
}

dependencies {
    // 引入MySQL JDBC驱动,版本和你Docker中运行的MySQL大版本匹配即可
    liquibaseRuntime 'mysql:mysql-connector-java:8.0.33'
    liquibaseRuntime 'org.liquibase:liquibase-core:4.20.0'
}

2. 调整项目结构存放SQL文件

在src/main目录下新建liquibase文件夹,结构如下:

  • src/main/liquibase/
    • changelog.xml (Liquibase变更日志主文件)
    • sql/ (存放你的SQL脚本,比如你现有的file.sql就放这里)

3. 编写Liquibase变更日志配置

在src/main/liquibase/changelog.xml中添加如下内容,关联你要执行的SQL文件:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.20.xsd">

    <!-- 配置要执行的SQL文件,id可以自定义,author填你的名字即可,alwaysRun设为true每次执行任务都会跑这个SQL,不需要的话可以改成false -->
    <changeSet id="init-sql-1" author="dev" runAlways="true">
        <sqlFile path="sql/file.sql" relativeToChangelogFile="true" splitStatements="true" endDelimiter=";"/>
    </changeSet>

</databaseChangeLog>

如果你有多份SQL要按顺序执行,新增多个<changeSet>标签按顺序写即可,Liquibase会自动记录已执行的变更,重复执行不会重复跑已经成功执行过的变更(除非你设置了runAlways="true")

4. 配置Liquibase Gradle任务参数

在build.gradle中添加Liquibase活动配置,关联你的Docker MySQL连接信息:

liquibase {
    activities {
        main {
            // Docker MySQL的连接地址,注意端口是你容器映射到宿主机的端口
            url 'jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8'
            username '你的MySQL用户名'
            password '你的MySQL密码'
            driver 'com.mysql.cj.jdbc.Driver'
            changelogFile 'src/main/liquibase/changelog.xml'
        }
    }
}

如果不想把账号密码硬编码在配置文件里,可以通过环境变量读取,改成username System.getenv("MYSQL_USER")、password System.getenv("MYSQL_PWD")即可

5. 执行任务验证

首先确保你的Docker MySQL容器已经启动,且端口已经映射到宿主机,然后在项目根目录执行以下Gradle命令即可触发SQL执行:

./gradlew update

你也可以自定义Gradle任务绑定这个操作,比如把Liquibase的update任务绑定到build流程里,每次构建自动执行。

注意事项

  • 要确保你的Docker MySQL容器的3306端口已经映射到宿主机,否则Gradle跑的Liquibase无法连接到数据库
  • 如果你的SQL里有建库语句,可以把url里的数据库名去掉,直接连MySQL服务实例即可
  • Liquibase会自动在你的数据库里生成2张表DATABASECHANGELOG和DATABASECHANGELOGLOCK用来记录变更执行情况,属于正常现象,不需要删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:45:06