如何使用Flyway配置来处理多个数据库

我们有一个使用maven配置的Java应用程序,该应用程序使用多个数据库。这是一个应用程序-许多架构。

我已经配置了flyway,已经过测试,并且效果很好,但是我的配置仅适用于一个数据库。

这是我的pom.xml使用一种模式进行测试:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.test</groupId>

<artifactId>test</artifactId>

<version>0.0.1-SNAPSHOT</version>

<build>

<plugins>

<!-- Flyway plugin configuration -->

<plugin>

<groupId>org.flywaydb</groupId>

<artifactId>flyway-maven-plugin</artifactId>

<version>3.0</version>

<configuration>

<url>jdbc:mysql://localhost:3306/argentina</url>

<user>test</user>

<password>test</password>

</configuration>

<dependencies>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.21</version>

</dependency>

</dependencies>

</plugin>

</plugins>

</build>

<dependencies>

<dependency>

<!-- alllll my dependency list -->

</dependency>

<!-- DB dependencies -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.21</version>

</dependency>

</dependencies>

</project>

更新:通过使用现在提供的答案,我将以下pom.xml配置为2个模式。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.test</groupId>

<artifactId>test</artifactId>

<version>0.0.1-SNAPSHOT</version>

<build>

<plugins>

<plugin>

<groupId>org.flywaydb</groupId>

<artifactId>flyway-maven-plugin</artifactId>

<version>3.0</version>

<executions>

<execution>

<id>argentina</id>

<phase>compile</phase> <!--whatever phase you need-->

<goals>

<goal>migrate</goal>

</goals>

<configuration>

<url>jdbc:mysql://localhost:3306/argentina</url>

<user>test</user>

<password>test</password>

<locations>

<location>

filesystem:src/main/resources/db/migration

</location>

</locations>

</configuration>

</execution>

<execution>

<id>brazil</id>

<phase>compile</phase> <!--whatever phase you need-->

<goals>

<goal>migrate</goal>

</goals>

<configuration>

<url>jdbc:mysql://localhost:3306/brazil</url>

<user>test</user>

<password>test</password>

<locations>

<location>

filesystem:src/main/resources/test2/sql

</location>

</locations>

</configuration>

</execution>

</executions>

<dependencies>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.21</version>

</dependency>

</dependencies>

</plugin>

</plugins>

</build>

<dependencies>

...

</dependencies>

</project>

我执行飞行操作,但没有成功,这是我收到的错误:

[INFO] Copying 5 resources

[INFO] [compiler:compile {execution: default-compile}]

[INFO] Nothing to compile - all classes are up to date

[INFO] [flyway:migrate {execution: argentina}]

[INFO] Database: jdbc:mysql://localhost:3306/argentina (MySQL 5.5)

[INFO] Validated 4 migrations (execution time 00:00.006s)

[INFO] Current version of schema `argentina`: 45678

[INFO] Schema `argentina` is up to date. No migration necessary.

[INFO] [flyway:migrate {execution: brazil}]

[INFO] Database: jdbc:mysql://localhost:3306/brazil (MySQL 5.5)

[INFO] Validated 1 migration (execution time 00:00.003s)

[INFO] Current version of schema `brazil`: 1

[INFO] Schema `brazil` is up to date. No migration necessary.

[INFO] [flyway:migrate {execution: default-cli}]

[INFO] ------------------------------------------------------------------------

[ERROR] BUILD ERROR

[INFO] ------------------------------------------------------------------------

[INFO] org.flywaydb.core.api.FlywayException: DataSource not set! Check your configuration!

数据库配置正常。另外,我检查了架构是否还可以。

更新:我从命令行飞行通道中删除:它运行良好。谢谢Jk1

回答:

您可以为具有不同配置的单个插件指定多个执行:

 <plugin>

<groupId>org.flywaydb</groupId>

<artifactId>flyway-maven-plugin</artifactId>

<version>3.0</version>

<executions>

<execution>

<id>first-execution</id>

<phase>compile</phase> <!--whatever phase you need-->

<goals>

<goal>migrate</goal>

</goals>

<configuration>

<url>jdbc:mysql://localhost:3306/schema2</url>

<user>root</user>

<password>root</password>

<locations>

<location>

filesystem:/path/to/migrations/folder

</location>

</locations>

</configuration>

</execution>

<execution>

<id>second-execution</id>

<phase>compile</phase> <!--whatever phase you need-->

<goals>

<goal>migrate</goal>

</goals>

<configuration>

<url>jdbc:mysql://localhost:3306/schema1</url>

<user>root</user>

<password>root</password>

<locations>

<location>

filesystem:/path/to/other/migrations/folder

</location>

</locations>

</configuration>

</execution>

</executions>

<dependencies>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.21</version>

</dependency>

</dependencies>

</plugin>

您可以使用’location’属性来定义要为每个模式运行的迁移,就像在上面的示例中所做的一样。位置类型由其前缀确定。无前缀的位置或以classpath开头的位置:指向classpath上的包,并且可能包含基于sql和基于Java的迁移。以文件系统开头的位置:指向文件系统上的目录,并且只能包含sql迁移。

以上是 如何使用Flyway配置来处理多个数据库 的全部内容, 来源链接: utcz.com/qa/407675.html

回到顶部