在我看来,最好和最灵活的方法是:
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 脚本。