我们尝试将某些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 |
+----------+---------+-------------+------+--------------+-------+
请帮助我们解决该问题。
答案 0 :(得分:1)
Flyway合并配置文件。它不会为每个迁移单独进行迁移。
对于每个配置文件,Flyway adds the content to a Properties map。 Properties
每个键只有一个值,因此如果同一键出现在第二个配置文件中,它将覆盖先前的值。这就是为什么似乎只使用了最后一个配置文件中的设置的原因。
它允许您在某处定义一些常用设置,例如在~/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描述为:
<current-dir>/flyway.conf
<user-home>/flyway.conf
<install-dir>/conf/flyway.conf
定义的设置越高,列表的优先级越高。
文档提供以下示例:
这意味着,例如,如果flyway.url都存在于配置中 文件并以-url =从命令行(命令行)传递 参数将优先使用。
自定义配置文件(-configFiles)行可以扩展为:
<current-dir>/flyway.conf
<user-home>/flyway.conf
<install-dir>/conf/flyway.conf
相应的示例可能是:
这意味着,例如,如果自定义配置文件1 和自定义配置文件2 中都同时存在flyway.url,则自定义配置文件2 设置将被优先使用。
类似地,如果flyway.url
也在自定义配置文件n 中,则会覆盖自定义配置文件2 中的设置。