使用 Maven + Flyway 来 Migrate/Clean/etc 多个数据库
Using Maven + Flyway to Migrate/Clean/etc multiple databases
我有一个包含多个数据库的 Maven 项目,我们正在使用 flyway 进行版本化:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>6.0.8</version>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
</dependency>
</dependencies>
<configuration>
<configFiles>/etc/hG/application.properties</configFiles>
</configuration>
<executions>
<execution>
<id>wave</id>
<phase>generate-sources</phase>
<goals>
<goal>migrate</goal>
<goal>info</goal>
</goals>
<configuration>
<url>${wave.flyway.url}</url>
<user>${db.aws.user}</user>
<password>${db.aws.pass}</password>
<driver>${flyway.driver}</driver>
<locations>
<location>
filesystem:src/main/resources/wave/migration
</location>
</locations>
</configuration>
</execution>
<execution>
<id>tracks</id>
<phase>generate-sources</phase>
<goals>
<goal>migrate</goal>
<goal>info</goal>
</goals>
<configuration>
<url>${tracks.flyway.url}</url>
<user>${db.timescale.tracks.user}</user>
<password>${db.timescale.tracks.pass}</password>
<driver>${flyway.driver}</driver>
<locations>
<location>
filesystem:src/main/resources/tracks/migration
</location>
</locations>
</configuration>
</execution>
<execution>
<id>osm</id>
<phase>generate-sources</phase>
<goals>
<goal>migrate</goal>
<goal>info</goal>
</goals>
<configuration>
<url>${osm.flyway.url}</url>
<user>${db.osm.user}</user>
<password>${db.osm.pass}</password>
<driver>${flyway.driver}</driver>
<locations>
<location>
filesystem:src/main/resources/osm/migration
</location>
</locations>
</configuration>
</execution>
</executions>
</plugin>
我希望能够从命令行使用 mvn flyway:clean
、flyway:migrate
、flyway:info
命令,但是它们不起作用:
[ERROR] Failed to execute goal org.flywaydb:flyway-maven-plugin:6.0.8:clean (default-cli) on project DataServices: org.flywaydb.core.api.FlywayException: Unable to connect to the database. Configure the url, user and password!
我怀疑这是因为我没有在我用于配置的 application.properties 文件中使用标准飞路属性,但这也向我暗示,如果我要使用这些标准属性,它会仅适用于单个数据库。有没有一种方法可以设置我的 maven 文件来清理每个数据库,甚至可以根据执行的 ID(wave、tracks、osm)来清理它们,以便它们使用这些属性?
更新: 我在想我可以通过制作 3 个在 clean
阶段工作的执行块来基本上重复我用于迁移的清理过程像这样:
<execution>
<id>wave-clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
<configuration>
<url>${wave.flyway.url}</url>
<user>${db.aws.user}</user>
<password>${db.aws.pass}</password>
<driver>${flyway.driver}</driver>
<locations>
<location>
filesystem:src/main/resources/wave/migration
</location>
</locations>
</configuration>
</execution>
...对另外两个重复。但是,现在我收到此错误:
[INFO] --- flyway-maven-plugin:7.11.4:clean (wave-clean) @ DataServices ---
[WARNING] Discarding INCOMPLETE dataSource configuration! flyway.url must be set.
我在问题中发布的更新是正确的,但我没有意识到我没有阅读 clean 生命周期的属性,所以我不得不在我的 properties-maven-plugin
块:
<execution>
<id>pre-clean-read-proj-props</id>
<phase>pre-clean</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>/etc/hG/application.properties</file>
</files>
</configuration>
</execution>
这读取了配置文件并消除了错误,现在 mvn clean
按预期清理了所有数据库!
我有一个包含多个数据库的 Maven 项目,我们正在使用 flyway 进行版本化:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>6.0.8</version>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
</dependency>
</dependencies>
<configuration>
<configFiles>/etc/hG/application.properties</configFiles>
</configuration>
<executions>
<execution>
<id>wave</id>
<phase>generate-sources</phase>
<goals>
<goal>migrate</goal>
<goal>info</goal>
</goals>
<configuration>
<url>${wave.flyway.url}</url>
<user>${db.aws.user}</user>
<password>${db.aws.pass}</password>
<driver>${flyway.driver}</driver>
<locations>
<location>
filesystem:src/main/resources/wave/migration
</location>
</locations>
</configuration>
</execution>
<execution>
<id>tracks</id>
<phase>generate-sources</phase>
<goals>
<goal>migrate</goal>
<goal>info</goal>
</goals>
<configuration>
<url>${tracks.flyway.url}</url>
<user>${db.timescale.tracks.user}</user>
<password>${db.timescale.tracks.pass}</password>
<driver>${flyway.driver}</driver>
<locations>
<location>
filesystem:src/main/resources/tracks/migration
</location>
</locations>
</configuration>
</execution>
<execution>
<id>osm</id>
<phase>generate-sources</phase>
<goals>
<goal>migrate</goal>
<goal>info</goal>
</goals>
<configuration>
<url>${osm.flyway.url}</url>
<user>${db.osm.user}</user>
<password>${db.osm.pass}</password>
<driver>${flyway.driver}</driver>
<locations>
<location>
filesystem:src/main/resources/osm/migration
</location>
</locations>
</configuration>
</execution>
</executions>
</plugin>
我希望能够从命令行使用 mvn flyway:clean
、flyway:migrate
、flyway:info
命令,但是它们不起作用:
[ERROR] Failed to execute goal org.flywaydb:flyway-maven-plugin:6.0.8:clean (default-cli) on project DataServices: org.flywaydb.core.api.FlywayException: Unable to connect to the database. Configure the url, user and password!
我怀疑这是因为我没有在我用于配置的 application.properties 文件中使用标准飞路属性,但这也向我暗示,如果我要使用这些标准属性,它会仅适用于单个数据库。有没有一种方法可以设置我的 maven 文件来清理每个数据库,甚至可以根据执行的 ID(wave、tracks、osm)来清理它们,以便它们使用这些属性?
更新: 我在想我可以通过制作 3 个在 clean
阶段工作的执行块来基本上重复我用于迁移的清理过程像这样:
<execution>
<id>wave-clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
<configuration>
<url>${wave.flyway.url}</url>
<user>${db.aws.user}</user>
<password>${db.aws.pass}</password>
<driver>${flyway.driver}</driver>
<locations>
<location>
filesystem:src/main/resources/wave/migration
</location>
</locations>
</configuration>
</execution>
...对另外两个重复。但是,现在我收到此错误:
[INFO] --- flyway-maven-plugin:7.11.4:clean (wave-clean) @ DataServices ---
[WARNING] Discarding INCOMPLETE dataSource configuration! flyway.url must be set.
我在问题中发布的更新是正确的,但我没有意识到我没有阅读 clean 生命周期的属性,所以我不得不在我的 properties-maven-plugin
块:
<execution>
<id>pre-clean-read-proj-props</id>
<phase>pre-clean</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>/etc/hG/application.properties</file>
</files>
</configuration>
</execution>
这读取了配置文件并消除了错误,现在 mvn clean
按预期清理了所有数据库!