Spring Boot的FlywayProperties.java支持许多Flyway设置,但不支持' baselineVersion'或者' baselineOnMigrate'。我正在将现有的应用程序转换为Flyway,这些设置似乎是为此目的而设计的。我们的生产环境受到高度控制,并在那里运行一个命令行版本的flyway来实现这一点是不切实际的。
创建自定义Flyway @Bean是唯一的选择吗?
答案 0 :(得分:11)
您可以将任何的flyways属性设置为 <?php $value=1; ?>
<script>
var simple = <?php echo $value; ?>;
alert(simple);
</script>
中flyway
的前缀。
application.yml/.properties
可以使用org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration.FlywayConfiguration#flyway
进行注释。
如果您使用的是@ConfigurationProperties(prefix = "flyway")
,请添加以下内容:
application.yml
如果使用flyway:
baselineOnMigrate: true
添加以下内容:
application.properties
答案 1 :(得分:9)
这是不可能的。我今天花了一些时间分析Spring Boot的代码,试图找到解决方案。在FlywayAutoConfiguration中没有设置任何这些属性。另外我发现Spring永远不会在Flyway对象上调用configure方法,这将是flyway.properties工作的唯一其他选项。 Spring正在滥用flyway.properties,而不是向Flyway提供这个文件,而是将它们自己用作属性的来源。这就是使用FlywayAutoConfiguration时可能的选项集如此有限的原因。因此,如果您需要Flyway的任何更高级功能,使用FlywayAutoConfiguration不是一个好选择。但是使用@Bean并不是一个悲剧。下面你可以看到一个使用@Bean的例子,使用任何属性文件都不可能实现这种行为:
@Profile(value = "!dbClean")
@Bean(name = "flyway", initMethod = "migrate")
public Flyway flywayNotADestroyer() {
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource());
flyway.setBaselineOnMigrate(true);
return flyway;
}
@Profile(value = "dbClean")
@Bean(name = "flyway", initMethod = "migrate")
public Flyway flywayTheDestroyer() {
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource());
flyway.setBaselineOnMigrate(true);
flyway.clean();
return flyway;
}
正如您所看到的,我在这里有两个Spring配置文件。一个默认情况下不会清理数据库,另一个默认情况下会清理数据库。非常便利。
答案 2 :(得分:7)
我成功使用了FlywayMigrationStrategy。
@Component
public class BaselineOnMigrateMigrationStrategy implements FlywayMigrationStrategy {
@Override
public void migrate(Flyway flyway) {
flyway.setBaselineOnMigrate(true);
flyway.migrate();
}
}
答案 3 :(得分:3)
您可以在application.properties
文件上使用,但是您需要为springboot 2添加spring.
前缀,例如在此回答评论https://stackoverflow.com/a/39244097/273119中标记的@pdem。
spring.flyway.baseline-上迁移=真
答案 4 :(得分:0)
在深入挖掘源代码并运行一些实验后,似乎因为setBaselineVersion()在Flyway类中重载,Spring无法注入属性值。
更改为 flyway.baselineVersionAsString = 2可以根据需要使用。
答案 5 :(得分:0)
我正在使用飞行路线5.1.4
,对我来说,将它们添加到application.properties
中是可行的
flyway.enabled = true
flyway.baseline-on-migrate = true