我正在评估Flyway在我的项目中使用。我们当前的SQL脚本包含诸如URL的占位符,这些URL将根据环境(dev,qa,prod)具有不同的域名。
具体来说,我们可能有像
这样的INSERT语句INSERT INTO FEED VALUES ('app.${env.token}.company.org/feed1', 'My Feed');
$ {env.token}需要替换为' dev',' qa'或' prod'。
我们有大约50种可能需要在SQL脚本中替换的不同属性。这些属性都驻留在一个或两个属性文件中。
有没有办法运行Flyway Ant迁移任务,以便从属性文件中提取替换标记和值?什么东西沿着Ant过滤器任务?
答案 0 :(得分:10)
目前,在将占位符作为属性提供时,属性名称应以 flyway.placeholders为前缀。
例如, $ {env.token} 占位符可以直接指定为此Ant属性: flyway.placeholders.env.token
目前不支持直接传递属性文件,而不使用属性名称的前缀。随意在Issue Tracker中提出问题。 : - )
答案 1 :(得分:7)
如果令牌为subdomain
:
INSERT INTO FEED VALUES ('app.${subdomain}.company.org/feed1', 'My Feed');
flyway.conf中的值:
flyway.url=jdbc:mydb://db
flyway.user=root
flyway.schemas=schema1
flyway.placeholders.subdomain=example
或命令行:
flyway -url=jdbc:mydb://db -user=root -schemas=schema1 -placeholders.subdomain=example migrate
将脚本运行为:
INSERT INTO FEED VALUES ('app.example.company.org/feed1', 'My Feed');
答案 2 :(得分:0)
Maven版本:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<configuration>
<url>jdbc:mysql://localhost/cloud</url>
<user>root</user>
<password>root</password>
<placeholderReplacement>false</placeholderReplacement>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
答案 3 :(得分:0)
根据我的经验,使用环境变量要容易得多 而不是CLI或配置文件(尤其是在使用docker和k8s时)。
您可以使用以下格式的环境变量-
export FLYWAY_PLACEHOLDERS_USER=${USER}
然后在您的sql语句中,像这样使用此变量-
INSERT INTO tmptable (user)
VALUES ('${user}')
详细了解环境变量here