IntelliJ IDEA 2026.2 Help

Flyway

Flyway 是一款数据库迁移工具,可进行版本控制、跟踪并应用数据库更改。 IntelliJ IDEA 提供如下对 Flyway 的支持:

在 IntelliJ IDEA 2024.1 版本之前,部分 Flyway 功能仅可通过 JPA Buddy 插件 使用。 下列视频演示了这些功能,现在可通过 Flyway 插件使用。

为现有项目添加 Flyway

  1. 在编辑器中打开构建文件(根据项目中所用构建工具,可能是 pom.xml build.gradle )。

  2. 添加 Flyway 依赖项,并确保其版本与项目的其他部分一致:

    <dependencies> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>12.0.3</version> </dependency> </dependencies>
    dependencies { implementation 'org.flywaydb:flyway-core:12.0.3' }
    dependencies { implementation("org.flywaydb:flyway-core:12.0.3") }
  3. (可选)如需通过 Maven 或 Gradle 运行 Flyway 命令,请添加如下插件:

    <plugins> <plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>12.0.3</version> <configuration> <url>${YOUR_DATABASE_URL}</url> <user>${YOUR_DATABASE_USERNAME}</user> <password>${YOUR_DATABASE_PASSWORD}</password> </configuration> </plugin> </plugins>
    plugins { id 'org.flywaydb.flyway' version '12.0.3' } flyway { url = '<YOUR DATABASE URL>' user = '<YOUR DATABASE USERNAME>' password = '<YOUR DATABASE PASSWORD>' }
    plugins { id ("org.flywaydb.flyway") version "12.0.3" } flyway { url = "<YOUR DATABASE URL>" user = "<YOUR DATABASE USERNAME>" password = "<YOUR DATABASE PASSWORD>" }

    完整的 Flyway 插件配置列表可参考 Flyway 配置文档

  4. Ctrl+Shift+O 导入更改。

有关使用构建工具的详细信息,请参阅 MavenGradle

Flyway 迁移

Flyway 迁移定义数据库架构或数据的更改。 这些通常是 SQL 文件,但 Flyway 也支持基于 Java 和脚本的迁移。 IntelliJ IDEA 提供内置操作来生成以下类型的 Flyway 迁移:

  • 初始迁移 :捕获当前表(数据库或持久化单元)的数据模型。 结果为 DDL 脚本,可用于在空数据库中重建该数据模型。

  • 差异迁移 :捕获两个数据模型之间的差异,比如当前数据库架构与代码中的实体映射之间的差异。 结果为 DDL 脚本,可用于将目标模型变为与源模型一致。

  • Java 迁移 :创建一个继承 Flyway BaseJavaMigration 并包含 migrate() 方法 存根的 Java 类。 与其他迁移类型不同,IntelliJ IDEA 在生成 Java 迁移时不会捕获数据模型或任何架构更改。

生成初始迁移

  1. 打开 Persistence 工具窗口。

  2. 在工具窗口中,右键点击持久化单元或实体,然后选择 新建 | Flyway 初始迁移…

  3. 在打开的 Flyway 初始化架构迁移 对话框中,选择迁移应基于的数据模型:

    init-schema-changelog

    根据选择,IntelliJ IDEA 会自动填写持久化单元或数据库连接,您可按需更改。

  4. 点击 OK

  5. 在打开的 Flyway 迁移预览对话框中,配置迁移并点击 保存

生成差异迁移

  1. 打开 Persistence工具窗口,右键点击持久化单元或实体,然后选择 新建 | Flyway 迁移…

    • 或者,打开 数据库 工具窗口,右键点击数据库或表,然后选择 创建 Flyway 迁移…

  2. 在打开的 Flyway 差异迁移 对话框中,选择要比较的数据模型:

    • 源(referenceURL) (当前数据模型):

    • 目标(URL) (前一个数据模型):

      • 数据库 :来自已连接数据库的架构

      • 快照 :来自 数据模型快照的架构

    迁移脚本窗口

    如果选择 数据库模型 ,IntelliJ IDEA 会自动填写数据库连接或持久化单元,您可按需更改。

  3. 点击 OK

  4. 在打开的 Flyway 迁移预览对话框中,配置迁移并点击 保存

SQL 迁移文件支持对表名称的快速导航。 可以跳转到表的实体类、首次引入该表的迁移,或(如果数据库已在 数据库 工具窗口中连接)数据库中该表的 DDL 定义。

要在迁移文件中使用快捷导航,请将光标放在表名处,按下 Ctrl+B ,并从 选择声明 列表中选择目标。 请注意无法对 CREATE TABLE 语句进行快捷导航。

导航到表声明选项

Flyway 迁移预览对话框

Flyway 迁移预览 对话框可预览生成的 DDL 语句,将其整理为迁移文件,并配置保存方式。

flyway-preview

对话框左侧展示了生成的架构更改树。 每个更改按其 风险等级着色,并带有代表更改类型的图标。 选择某项更改时,IntelliJ IDEA 会在对话框右侧显示其 DDL 语句。

更改树上方的图标可用于管理生成的更改和迁移:

添加迁移

添加迁移

创建额外的迁移。

从迁移中移除

从迁移中移除

移除迁移中的所选更改,并可选择将它们移动到 已忽略 部分,以便将其排除在以后迁移之外。

从忽略状态还原

将所选更改从 已忽略 部分移动至指定迁移。

移至另一个迁移

将所选更改移动到其他迁移。

如果对话框内没有其他迁移且选择此选项,IntelliJ IDEA 会自动创建一个。

显示其他操作

可一次性与多个更改交互: 全选 (特定风险等级)、 全部展开全部折叠

对话框右侧展示所选更改生成的 DDL 语句。 如选择了迁移(而非单独更改),还可以通过此区域指定保存方式:

条目

描述

另存为

可以选择将迁移保存为 SQL 文件、 临时文件 ,复制到剪贴板,或在 查询控制台 中打开。

目录

请选择 IntelliJ IDEA 保存 SQL 文件的位置。

文件名

设置文件名。

IntelliJ IDEA 会根据 Flyway 插件设置 自动填充前缀和版本。

基于 Java 的迁移

基于 Java 的迁移适用于无法使用 SQL 轻松表示的更改,是 SQL 迁移的替代方案。 这些为实现 Flyway JavaMigration 接口的 Java 类(通常通过扩展 BaseJavaMigration 类),需遵循 Flyway 的 命名模式

生成 Java 迁移文件

  1. 请按 Ctrl+Shift+A ,输入 Flyway Java 迁移 并按 Enter

  2. 在打开的 Flyway Java 迁移 对话框中,设置文件名。 IntelliJ IDEA 会根据 Flyway 插件设置 自动填充前缀和版本。

    flyway-java-migration

    如有需要,请更改迁移应创建的源码根目录或软件包。

  3. 点击 OK

IntelliJ IDEA 会在编辑器中打开生成的 Java 迁移类。

package org.example.demoflyway; import org.flywaydb.core.api.migration.BaseJavaMigration; import org.flywaydb.core.api.migration.Context; import java.sql.PreparedStatement; public class V1__CreateTables extends BaseJavaMigration { @Override public void migrate(Context context) throws Exception { try (PreparedStatement statement = context.getConnection() .prepareStatement("")) { statement.execute(); } } }

Flyway 回调函数

运行迁移流程时,Flyway 会依次执行待处理迁移,一旦所有迁移应用完成则结束流程。 虽然这种流程适合大多数常见场景,但更复杂的项目可能需要在每次迁移或迁移生命周期的特定点运行额外逻辑。 Flyway 通过 回调 支持此类要求。

IntelliJ IDEA 提供内置操作来生成以下类型的 Flyway 回调:

创建空 SQL 回调

  1. 请按 Ctrl+Shift+A ,输入 Flyway SQL 回调 并按 Enter

  2. 将打开 Flyway SQL 回调 对话框。 IntelliJ IDEA 会自动填写将要创建回调的源根目录和目录,但如有需要可更改。

    Flyway SQL 回调
  3. 点击 带有三个水平点的按钮 字段旁的 回调事件。 将会打开 选择回调事件 对话框,可在其中选择回调将在迁移生命周期的哪个阶段运行。

    回调事件

    每个回调事件旁的图标指示其是否可用于 Flyway Community Edition(CE ),或是否需要 Enterprise Edition(TE)。

  4. (可选)添加回调描述。 该值将附加到文件名称。

  5. 点击 OK

IDE 会在编辑器中打开回调文件。 您现在可以添加将在所选回调事件期间执行的 SQL 语句。

生成 Java 回调

  1. 请按 Ctrl+Shift+A ,输入 Flyway Java 回调 并按 Enter

  2. 将打开 Flyway Java 回调 对话框。 其选项决定回调类名称、位置以及 接口方法 的初始实现。

    Flyway Java 回调

    配置回调选项:

    条目

    描述

    名称

    指定类名称。

    回调名称

    指定回调名称。 这将成为 getCallbackName() 方法的返回值。

    回调事件

    指定 Flyway 在迁移生命周期的哪些点将从该类调用 handle() 方法。 IntelliJ IDEA 会自动将它们添加到 supports() 方法。

    可手动输入 事件名称 ,或点击 带有三个水平点的按钮 ,在 选择回调事件 对话框中选择。

    可以在事务中处理

    如果希望 canHandleInTransaction() 方法返回 true ,请选择此选项。

    源根

    选择要创建回调的源根。

    软件包

    选择要创建回调的软件包。

  3. 点击 OK

IntelliJ IDEA 会在编辑器中打开生成的 Java 回调类。

package db.callback; import org.flywaydb.core.api.callback.Callback; import org.flywaydb.core.api.callback.Context; import org.flywaydb.core.api.callback.Event; public class FlywayCallback implements Callback { @Override public boolean supports(Event event, Context context) { return event.equals(Event.BEFORE_MIGRATE); } @Override public boolean canHandleInTransaction(Event event, Context context) { return true; } @Override public void handle(Event event, Context context) { //TODO handle logic... } public String getCallbackName() { return "Flyway"; } }

部署迁移脚本

准备好迁移脚本和回调后,可使用专用 Flyway 运行配置 触发迁移流程,让数据库与代码保持同步。 可通过 运行微件 或选定的工具 Windows 启动此运行配置。

从运行微件运行迁移流程

  • 如果运行微件中已选择 Flyway 运行配置,请点击 运行

    • 或者按 Shift+F10

  • 如果运行微件中选择了其他配置,请点击其名称。 在弹出的窗口中,找到 Flyway 运行配置,并点击其旁的 运行

    • 或者按 Alt+Shift+F10。 在弹窗中选择 Flyway 运行配置。

IntelliJ IDEA 会在 运行工具窗口 中启动 Flyway 运行配置。

从工具 Windows 运行迁移流程

可从以下工具 Windows 启动 Flyway 运行配置:

  • 持久性工具窗口:

    • 右键点击持久化单元或实体并选择 运行 Flyway 迁移…

  • 数据库工具窗口:

    • 转到工具栏并选择 运行 Flyway 迁移…

    • 右键点击数据库、架构或表,并选择 运行 Flyway 迁移…

  • 仅限 Spring 项目 项目工具窗口:

    • 右键点击 SQL 迁移文件所在目录并选择 运行 | Flyway

IntelliJ IDEA 会在 运行工具窗口 中启动 Flyway 运行配置。

Flyway 运行配置

Flyway 运行配置允许无需启动整个应用程序或使用终端,即可针对已连接数据库执行 SQL 迁移文件和回调。 在底层,该配置会运行 Flyway migrate 命令

创建 Flyway 运行配置

  1. 打开 运行/调试配置 对话框:

    • 在主工具栏,点击 运行微件并选择 编辑配置…

    • 或者,转到 运行 | 编辑配置…

  2. 在对话框左侧,选择 添加新配置 | Flyway

  3. 设置 运行配置选项。

Flyway 运行配置选项

运行配置选项

条目

描述

名称

在编辑或运行时,指定运行配置的名称以便快速识别。

存储为项目文件

将运行配置设置保存到文件中,以便与其他团队成员共享。 默认位置是 .idea/runConfigurations 。 但是,如果您不想共享 .idea 目录,您可以将配置保存到项目内的任何其他目录。

默认情况下,此选项是禁用的,IntelliJ IDEA 将运行配置设置存储在 .idea/workspace.xml

必填选项

条目

描述

目录

指定 SQL 迁移文件所在目录的路径。

数据库连接

指定 Flyway 在运行迁移时应目标哪个数据库。

需从 数据库 工具窗口选择现有 数据源 ,或点击 新建。

其他选项

要将这些选项添加到运行配置中,请在对话框右侧选择 修改选项

条目

描述

迁移时设置基线

决定当尝试在没有历史表的非空数据库架构上执行迁移时,Flyway 应如何处理:

  • 如果选择此选项,Flyway 会创建历史表,将现有架构标记为基线,并仅在版本为 2 及以上时执行迁移。

  • 如果取消选择此选项,Flyway 将抛出错误并不执行迁移。

可通过 Flyway 官方文档详细了解该设置。

架构

指定 Flyway 在运行迁移时应目标哪个数据库架构。

如需填写多个值,请用逗号分隔。

可通过 Flyway 官方文档详细了解该设置。

Flyway 插件设置

IntelliJ IDEA 中的 Flyway 插件设置允许配置 IDE 在生成迁移时使用的命名模式。

如需访问 Flyway 插件设置,请打开 设置Ctrl+Alt+S ),然后转到 工具 | 数据库版本管理 | Flyway

设置对话框中的 Flyway 设置

您可以配置以下设置:

条目

描述

迁移前缀

指定 IDE 生成迁移文件名称时应使用的前缀。

版本模式

指定 IDE 设置文件版本时应使用的模式。 可包含以下宏:

  • #increment(<start>, <step>, <decimalFormat>) :使用数字序列生成版本。

    • start :首个迁移的版本号

    • step :每个版本号的递增值

    • decimalFormat :用于格式设置版本号的 DecimalFormat 模式

  • #date(<simpleDateFormat>) :使用当前系统日期生成版本。

  • ${semVer.<getterMethod>} :使用项目构建文件中的 语义版本生成版本。

    • getterMethod :提取语义版本特定段的方法。 以下是 1.2.3-SNAPSHOT+build4 版本的示例:

      • ${semVer.getRawVersion()} :1.2.3-快照+build4

      • ${semVer.getMajor()} :1

      • ${semVer.getMinor()} :2

      • ${semVer.getPatch()} :3

      • ${semVer.getPreRelease()} :SNAPSHOT

迁移分隔符

指定文件版本与描述之间的分隔符。

迁移描述

指定将在每个文件名称分隔符后添加的描述。

无依赖项使用 Flyway

如果想在 IntelliJ IDEA 中使用 Flyway 功能而不向构建文件添加依赖项,请选择此选项。

Spring 项目的其他功能

除了 IntelliJ IDEA 提供的标准 Flyway 支持外,基于 Spring 框架的项目还可使用额外的 IDE 功能。

迁移状态

通常要查看哪些迁移已执行及其结果,可以运行 Flyway 的 info 命令或在数据库中检查其 架构历史表。 IntelliJ IDEA 提供更快捷的替代方案,直接在 IDE 中显示 SQL 迁移状态。

整个迁移文件的状态会显示在 项目 工具窗口(Alt+1 )中。

项目工具窗口中的 Flyway 图标,已应用迁移显示勾选,迁移失败显示感叹号

每个迁移由 Flyway 徽标表示(Flyway 徽标图标 ),其状态通过徽标右下角的小图标反映:

图标

状态

绿色勾选图标

迁移已成功应用于数据库。

红色感叹号图标

迁移已执行,但某个 SQL 语句失败。

若失败的迁移被红色下划线标记,可将鼠标悬停在文件名称上查看更多错误信息。

在编辑器装订区域紧邻 SQL 语句旁显示红色感叹号

若要检查是哪个 SQL 语句引发错误,请在编辑器中打开带有下划线的迁移,并查找装订区域中的红色感叹号。

在编辑器装订区域紧邻 SQL 语句旁显示红色感叹号

(无)

迁移尚未执行。

故障排除

迁移不显示状态图标

此功能仅在 Spring 项目中可用。 若项目使用了 Spring,请确保:

  • 已向项目构建文件 添加 Flyway 依赖

  • 连接到对应数据库 ,且连接在 数据库 工具窗口中处于活动状态。

  • 配置文件( application.properties application.yml )满足如下条件:

    • spring.flyway.locations 指向迁移文件所在目录。

    • spring.flyway.urlspring.datasource.url 与用于连接数据库的 URL 匹配。

  • 已运行 Flyway 的 migrate 命令 ,结果已记录在 架构历史表中。

2026年 7月 14日