【问题标题】:Flyway Future State prevents new migrationFlyway Future State 阻止新的迁移
【发布时间】:2023-01-01 18:48:19
【问题描述】:

我正在尝试 Java 迁移教程。修改迁移的 Java 类后,Java 类卡在 Future 状态并阻止新的迁移。我是 Flyway 的新手,不确定我哪里做错了。或者 Future 状态是否存在任何已知问题?

我首先添加了两个 SQL 文件并运行了 mvn flyway:migrate。两个文件都已成功迁移。然后添加一个 Java 类 V3__Anonymize,再次运行 mvn flyway:migrate。也很成功信息命令显示

+-----------+--------+---------------------+------+---------------------+---------+  
| Category  | Version| Description         | Type | Installed On        | State   |  
+-----------+--------+---------------------+------+---------------------+---------+  
| Versioned | 1      | Create person table | SQL  | 2022-11-03 08:26:52 | Success |  
| Versioned | 2      | Add people          | SQL  | 2022-11-03 08:28:45 | Success | 
| Versioned | 3      | Anonymize           | JDBC | 2022-11-03 09:05:29 | Success | 
+-----------+--------+---------------------+------+---------------------+---------+

然后我修改了 V3__Anonymize 类,只添加一行来为 System.out.println("something") 迁移函数。 info 命令显示了这第三个具有 Future 状态的作业:

+-----------+--------+---------------------+------+---------------------+---------+  
| Category  | Version| Description         | Type | Installed On        | State   |
+-----------+--------+---------------------+------+---------------------+---------+  
| Versioned | 1      | Create person table | SQL  | 2022-11-03 08:26:52 | Success | 
| Versioned | 2      | Add people          | SQL  | 2022-11-03 08:28:45 | Success | 
| Versioned | 3      | Anonymize           | JDBC | 2022-11-03 09:05:29 | Future  | +-----------+--------+---------------------+------+---------------------+---------+ 

然后运行 ​​mvn flyway:migrate,它给出了如下所示的警告。

[INFO] --- flyway-maven-plugin:9.7.0:migrate (default-cli) @ my-migration-service ---
[INFO] Flyway Community Edition 9.7.0 by Redgate  
[INFO] See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#9.7.0 
[INFO]
[INFO] Database: jdbc:h2:file:./target/foobar (H2 2.1)  
[INFO] Successfully validated 3 migrations (execution time 00:00.020s)  
[INFO] Current version of schema "PUBLIC": 3 
[WARNING] Schema "PUBLIC" has a version (3) that is newer than the latest available migration (2) !  
[INFO] Schema "PUBLIC" is up to date. No migration necessary.

我尝试运行 mvn compile,然后运行 ​​mvn flyway:migrate、mvn flyway:info,但我仍然收到相同的警告,第三个作业仍处于 Future 状态。

我还添加了一个新的 Java 类 V4__Add_another_person,然后运行 ​​mvn compile、mvn flyway:migrate,但第三个作业的状态没有变化。新作业未添加到 flyway:info 输出。

然后运行 ​​mvn flyway:migrate,它给出了如下所示的警告。

【问题讨论】:

    标签: java flyway


    【解决方案1】:

    运行迁移后,您不应再触及它的脚本。由于校验和不同,这里确定是您执行的操作。只要此代码未推送到 master 分支(并且有人运行迁移),您就可以从 flyway_schema_history 中删除最新行,然后再次迁移。

    【讨论】:

    • 我试图从浏览器打开嵌入式 H2 数据库的控制台,以检查 flyway_schema_history 表的内容。但找不到 jdbc URL 应该是什么。它默认指向用户家。我将数据库文件复制到我的用户主目录,然后我就可以打开数据库了。
    • 现在我从目标文件夹中删除了数据库文件 (foobar.mv.db) 并重复了教程步骤。但是不知何故flyway再也检测不到java类了,只迁移了两个SQL文件。我尝试了各种清理方法,但仍然没有成功。我删除了 foobar.mv.db 文件,然后运行 ​​mvn clean、mvn compile、mvn flyway:migrate,所有步骤均成功。日志最后显示“已成功将 2 个迁移应用到模式“PUBLIC”,现在版本为 v2 ...”,即使我在迁移路径上有两个 java 类。
    • 我试着在一个新项目中做这个练习,它有效。只是好奇是什么阻止了 flyway 在我完成清理后检测原始项目中的 java 代码。在某处它仍然有我对已迁移文件的意外触摸的痕迹!
    猜你喜欢
    • 2021-11-22
    • 2016-03-17
    • 2019-12-27
    • 2021-05-07
    • 2020-07-20
    • 2013-03-03
    • 2019-01-16
    • 2017-10-08
    • 2022-01-10
    相关资源
    最近更新 更多