Flyway的XML迁移脚本怎么用

来源:菜鸟站长作者:长沙SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《Flyway的XML迁移脚本怎么用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Flyway的XML迁移脚本怎么用》有用,将其分享出去将是对创作者最好的鼓励。

Flyway支持多种格式的迁移脚本,XML迁移脚本是其中一种可选格式,适合需要更灵活配置或者需要结合外部逻辑定义迁移逻辑的场景,下面详细介绍其使用方法。

Flyway的XML迁移脚本怎么用

Flyway XML迁移脚本的命名规范

Flyway的XML迁移脚本需要遵循固定的命名规则,否则无法被Flyway识别执行。命名格式为V<版本号>__<描述>.xml,其中版本号是递增的数字,描述部分可以自定义,用于说明本次迁移的内容,两个下划线是固定的分隔符。

例如创建用户表的迁移脚本可以命名为V1__create_user_table.xml,后续新增字段的脚本可以命名为V2__add_user_age_column.xml,版本号必须依次递增,不能出现重复或者倒序的情况。

XML迁移脚本的基本结构

XML迁移脚本需要遵循Flyway定义的XML schema,根节点为<migration>,内部可以包含多个数据库操作语句,支持不同数据库的差异配置。基本结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<migration xmlns="http://flywaydb.org/schema/migration"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://flywaydb.org/schema/migration
                              http://flywaydb.org/schema/migration/migration-1.0.xsd">
    <!-- 这里编写具体的数据库操作语句 -->
</migration>

编写XML迁移脚本实现数据库操作

<migration>节点内部,可以使用<sql>标签编写SQL语句,也可以使用<changeSet>等标签实现更复杂的逻辑。下面以创建用户表为例,编写对应的XML迁移脚本:

<?xml version="1.0" encoding="UTF-8"?>
<migration xmlns="http://flywaydb.org/schema/migration"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://flywaydb.org/schema/migration
                              http://flywaydb.org/schema/migration/migration-1.0.xsd">
    <sql>
        CREATE TABLE IF NOT EXISTS user (
            id INT PRIMARY KEY AUTO_INCREMENT,
            username VARCHAR(50) NOT NULL COMMENT '用户名',
            password VARCHAR(100) NOT NULL COMMENT '密码',
            create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
    </sql>
</migration>

如果需要执行多条SQL语句,可以在<migration>内部添加多个<sql>标签,每个标签对应一条或者一组相关的SQL语句:

<?xml version="1.0" encoding="UTF-8"?>
<migration xmlns="http://flywaydb.org/schema/migration"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://flywaydb.org/schema/migration
                              http://flywaydb.org/schema/migration/migration-1.0.xsd">
    <sql>
        ALTER TABLE user ADD COLUMN age INT DEFAULT 0 COMMENT '年龄';
    </sql>
    <sql>
        CREATE INDEX idx_user_username ON user(username);
    </sql>
</migration>

配置Flyway执行XML迁移脚本

编写好XML迁移脚本后,需要将脚本放到Flyway默认的迁移脚本目录db/migration下,如果是Spring Boot项目,可以直接放在resources/db/migration目录中。接下来配置Flyway的基本信息,以Spring Boot项目为例,在application.yml中添加如下配置:

spring:
  flyway:
    enabled: true # 开启Flyway
    locations: classpath:db/migration # 迁移脚本目录
    baseline-on-migrate: true # 首次迁移时自动创建基线
    validate-on-migrate: true # 迁移时校验脚本

如果是非Spring Boot项目,可以通过Flyway的API手动配置执行:

import org.flywaydb.core.Flyway;

public class FlywayDemo {
    public static void main(String[] args) {
        Flyway flyway = Flyway.configure()
                .dataSource("jdbc:mysql://127.0.0.1:3306/test_db", "root", "root123")
                .locations("classpath:db/migration")
                .load();
        // 执行迁移
        flyway.migrate();
    }
}

执行与验证迁移结果

启动项目或者运行上述Java代码后,Flyway会自动扫描db/migration目录下的所有迁移脚本,按照版本号顺序执行未被执行的XML脚本。执行完成后,可以查看数据库中的flyway_schema_history表,确认迁移记录:

SELECT * FROM flyway_schema_history;

如果脚本执行成功,对应的记录中success字段会显示为1,同时数据库中会出现XML脚本中定义的用户表以及对应的字段和索引。

注意事项

  • XML迁移脚本的版本号必须严格递增,不能修改已经执行过的脚本内容,否则会导致校验失败。
  • 如果需要在不同数据库执行不同的SQL,可以在<sql>标签上添加dbms属性,指定适用的数据库类型,例如<sql dbms="mysql">表示仅在MySQL数据库执行该语句。
  • XML脚本中的SQL语句语法需要和使用的数据库类型匹配,避免因为语法不兼容导致迁移失败。

FlywayXML迁移脚本数据库迁移flyway_migration修改时间:2026-07-11 12:45:27

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。