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