应用程序属性
TM_ESCALATION_QUALIFICATION=SHIFT_LEADER
Application.java
@Value( "${TM_ESCALATION_QUALIFICATION}" )
String escalationQualification;
@Bean
InitializingBean printConfigurations(DataSource datasource) {
return () -> {
Flyway flyway = new Flyway();
flyway.setDataSource(datasource);
flyway.getPlaceholders().put( "ESCALATION_QUALIFICATION", escalationQualification );
flyway.migrate();
};
}
SQL 文件
insert into tm_qualification (ID, NAME, DELETABLE) values (sys_guid(), ${ESCALATION_QUALIFICATION}, 0);
当我使用具有默认扩展名的文件时,上述内容有效,但当我将文件创建为 .sql 扩展名时,出现以下错误。
错误
org.flywaydb.core.api.FlywayException: No value provided for placeholder expressions: ${ESCALATION_QUALIFICATION}. Check your configuration!
at org.flywaydb.core.internal.util.PlaceholderReplacer.checkForUnmatchedPlaceholderExpression(PlaceholderReplacer.java:101)
at org.flywaydb.core.internal.util.PlaceholderReplacer.replacePlaceholders(PlaceholderReplacer.java:78)
at org.flywaydb.core.internal.dbsupport.SqlScript.<init>(SqlScript.java:79)....
最佳答案
来自网络,建议使用
flyway.placeholderReplacement=false
只有升级到 > Flyway 4.0.3 后才有效(Spring Boot 最新使用 ooold 版本)
另一件事是使用虚假的占位符前缀,这成功了......
flyway.placeholderPrefix=$$$-bogus-$$$
关于java - Flyway如何在SQL文件内插入查询中使用占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36323998/