【问题标题】:Flywaydb multiple config files for migration is failingFlywaydb 用于迁移的多个配置文件失败
【发布时间】:2019-01-02 07:23:32
【问题描述】:

我们曾尝试在单个数据库中迁移一些 SQL 版本,并且进展顺利。何时尝试通过传递多个配置文件同时为多个数据库实现迁移失败。

问题是它只需要最后一个配置文件,并且在“-configFiles”参数中传递多个配置文件时,仅对上一个配置文件中提到的数据库执行迁移。

下面是同样的截图,只截取了flywayconfdb.conf文件,留下了其他文件。

[oracle@localhost flyway-5.1.4]$ ./flyway -configFiles=/home/oracle/flyway/flyway-5.1.4/conf/flyway.conf,/home/oracle/flyway/flyway-5.1.4/conf/flywayjiradb.conf,/home/oracle/flyway/flyway-5.1.4/conf/flywayconfdb.conf info
Flyway Community Edition 5.1.4 by Boxfuse

Database: jdbc:oracle:thin:@//XXXXXXXXX:1521/confdb (Oracle 12.2)
Schema version: << Empty Schema >>

+----------+---------+-------------+------+--------------+-------+
| Category | Version | Description | Type | Installed On | State |
+----------+---------+-------------+------+--------------+-------+
| No migrations found                                            |
+----------+---------+-------------+------+--------------+-------+

请帮助我们解决同样的问题。

【问题讨论】:

    标签: flyway


    【解决方案1】:

    Flyway 合并配置文件。它不会为每个单独迁移。

    对于每个配置文件,Flyway adds the content to a Properties mapProperties 每个键只有一个值,因此如果相同的键出现在第二个配置文件中,它将覆盖以前的值。这就是为什么似乎只使用了最后一个配置文件中的设置。

    它允许您在某处定义一些常用设置,例如在~/flyway.conf 中,它可以与一些更具体的设置合并,例如在个别项目中。

    但它不允许您在一次运行中迁移多个数据库。您需要为每个数据库运行一次 Flyway:

    ./flyway -configFiles=/home/oracle/flyway/flyway-5.1.4/conf/flywayjiradb.conf info
    ./flyway -configFiles=/home/oracle/flyway/flyway-5.1.4/conf/flywayconfdb.conf info
    

    文档将Overriding Order 描述为:

    • 命令行参数
    • 环境变量
    • 自定义配置文件
    • &lt;current-dir&gt;/flyway.conf
    • &lt;user-home&gt;/flyway.conf
    • &lt;install-dir&gt;/conf/flyway.conf
    • Flyway 命令行默认值

    在列表中较高位置定义的设置具有较高的优先级。

    文档给出了以下示例:

    这意味着如果例如 flyway.url 都存在于配置中 文件并作为 -url= 从命令行传递,命令行 参数将优先并被使用。

    自定义配置文件 (-configFiles) 行可以扩展为:

    • 命令行参数
    • 环境变量
    • 自定义配置文件 n
    • ...
    • 自定义配置文件 2
    • 自定义配置文件 1
    • &lt;current-dir&gt;/flyway.conf
    • &lt;user-home&gt;/flyway.conf
    • &lt;install-dir&gt;/conf/flyway.conf
    • Flyway 命令行默认值

    相应的例子可能是:

    这意味着如果例如 flyway.url 同时存在于 自定义配置文件 1自定义配置文件 2 中,自定义配置文件 2 strong> 设置将优先使用。

    同样,如果flyway.url 也在自定义配置文件 n 中,则会覆盖 自定义配置文件 2 中的该设置。

    【讨论】:

    • 感谢 cmets。以下来自flyway文档。我想了解多个配置文件中提到的数据库名称是指向一个还是多个数据库?要传入多个文件,请用逗号分隔它们的名称: > flyway -configFiles=path/to/myAlternativeConfig.conf,other.conf migrate 相对路径是相对于当前工作目录的。 flywaydb.org/documentation/commandline
    • 即使myAlternativeConfig.confother.conf 确实指向不同的数据库,也只会使用来自other.confflyway.url,因为它会覆盖myAlternativeConfig.conf 中的那个。文档在此处描述了优先顺序:flywaydb.org/documentation/commandline/#overriding-order
    • 用更多细节更新了我的答案。这是否回答你的问题?希望这是有道理的。
    • 是的,现在说得通了。非常感谢您的洞察力。
    猜你喜欢
    • 2018-03-15
    • 2016-10-11
    • 2017-06-12
    • 2015-08-19
    • 2019-04-09
    • 2018-08-04
    • 2014-12-23
    • 2015-01-05
    • 1970-01-01
    相关资源
    最近更新 更多