我可以在maven pom.xml中使用属性文件进行flyway配置

时间:2012-09-27 10:36:58

标签: maven pom.xml flyway

<plugin>
    <groupId>com.googlecode.flyway</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
    <version>1.7</version>
    <configuration>
        <driver>com.mysql.jdbc.Driver</driver>
        <url>jdbc:mysql://127.0.0.1:3306/db_abc</url>
        <user>db_user</user>
        <sqlMigrationPrefix>V</sqlMigrationPrefix>
    </configuration>
</plugin>

我不想在这里提及驱动程序,网址和用户。我abc.property已经src/main/resources了。如何在这里使用该文件?

5 个答案:

答案 0 :(得分:33)

查看properties-maven-plugin。它允许您从文件中读取属性,然后在您的pom中使用它们。

添加以下插件定义:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0.0</version>
    <executions>
      <execution>
        <phase>initialize</phase>
        <goals>
          <goal>read-project-properties</goal>
        </goals>
        <configuration>
          <files>
            <file>src/main/resources/abc.properties</file>
          </files>
        </configuration>
      </execution>
    </executions>
  </plugin>

如果abc.properties包含:

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/db_ab
jdbc.user = db_user

然后您可以按如下方式使用这些属性:

<!-- language: xml -->

<driver>${jdbc.driver}</driver>
<url>${jdbc.url}</url>
<user>${jdbc.user}</user>

答案 1 :(得分:4)

在3.0版中,您必须使用configFile,如:

<configFile>src/main/resources/db/config/flyway.properties</configFile>

答案 2 :(得分:4)

在我看来,最好和最灵活的方法是:

a)使用配置文件和过滤 - 保留特定配置文件(开发,测试等)的所有配置属性,例如:在development.properties中:

jdbc.url=jdbc:mysql://127.0.0.1:3306/testdb?useSSL=false
jdbc.user=testuser
jdbc.password=testpass
jdbc.driver=com.mysql.jdbc.Driver

然后,在你的pom文件中(可能在root pom中)定义一个配置文件,例如:

...
<profiles>
    <profile>
        <id>development</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <filters>
                <filter>../filters/development.properties</filter>
            </filters>
        </build>
        ...

您可以在此处看到默认情况下已激活开发配置文件。如果您想使用其他配置文件,请将其设置为

-p [profile-id]


b)设置带有过滤值的flyway.properties - 你的flyway.properties应该是例如在src / main / resources中,应该从配置文件属性文件中定义的参数中使用这些值:

flyway.driver = ${jdbc.driver}
flyway.url = ${jdbc.url}
flyway.user = ${jdbc.user}
flyway.password = ${jdbc.password}

c)从构建目录中引用flyway.properties - 使用简单的插件配置(我真的很喜欢干净的poms):

...
    <build>
        <resources>
            <!-- This way we instruct maven to inject values from filters into the resources -->
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.flywaydb</groupId>
                <artifactId>flyway-maven-plugin</artifactId>
                <configuration>
                    <configFile>${project.build.directory}/classes/flyway.properties</configFile>
                    <locations>
                        <location>classpath:migration/mysql</location>
                    </locations>
                </configuration>
            </plugin>
        </plugins>
    </build>
    ...

不要忘记在资源中启用过滤,如此处的许多示例所示。我的 flyway-maven-plugin版本是3.2.1 ,它在父pom的pluginManagement中管理,因此这里看不到版本。我还使用带位置配置的显式sql脚本。

答案 3 :(得分:1)

有几种方法可以解决这个问题。一种方法是反过来做。

这意味着要使用的属性将保存为pom.xml中的属性,并且文件abc.properties仅具有将在构建时填充的占位符。

我将向您展示如何配置它。

这就是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.stackoverflow</groupId>
    <artifactId>Q12619446</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>${project.artifactId}-${project.version}</name>

    <properties>
        <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
        <jdbc.url>jdbc:mysql://127.0.0.1:3306/db_abc</jdbc.url>
        <jdbc.user>db_user</jdbc.user>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>com.googlecode.flyway</groupId>
                <artifactId>flyway-maven-plugin</artifactId>
                <version>1.7</version>
                <configuration>
                    <driver>${jdbc.driver}</driver>
                    <url>${jdbc.url}</url>
                    <user>${jdbc.user}</user>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

这将是您的src/main/resources/abc.properties(使用您选择的密钥名称):

jdbcDriver = ${jdbc.driver}
jdbcUrl = ${jdbc.url}
jdbcUser = ${jdbc.user}

构建后,target/classes/abc.properties将如下所示:

jdbcDriver = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://127.0.0.1:3306/db_abc
jdbcUser = db_user

如前所述,这只是一种的几种方法。它可能不适合您的确切需求,但它可能。

答案 4 :(得分:0)

在版本3.x中,您有configFile选项

By default- flyway.properties in the same directory as the project POM.

您可以在pom的配置部分添加外部属性文件,或者在运行maven目标示例时可以通过 - 命令行 -

mvn <goal> -Dflyway.configFile=myConfig.properties 

Pom文件 -

<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>3.2.1</version>
<configuration>
    <driver/>
    <url/>
    <user/>
    <password/>
    <baselineVersion>1.0</baselineVersion>
    <baselineDescription>Base Migration</baselineDescription>
    <skip>false</skip>
    <configFile>myConfig.properties</configFile>
    </configuration>
</plugin>