dro*_*hat 10 flyway spring-boot
Spring Boot的FlywayProperties.java支持许多Flyway设置,但不支持'baselineVersion'或'baselineOnMigrate'.我正在将现有的应用程序转换为Flyway,这些设置似乎是为此目的而设计的.我们的生产环境受到高度控制,并在那里运行一个命令行版本的flyway来实现这一点是不切实际的.
创建自定义Flyway @Bean是唯一的选择吗?
小智 12
您可以设置任何飞行路线的属性与被前缀他们flyway在你的application.yml/.properties.
它可以通过org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration.FlywayConfiguration#flyway注释来实现@ConfigurationProperties(prefix = "flyway").
如果您使用的是application.yml添加以下内容:
flyway:
baselineOnMigrate: true
Run Code Online (Sandbox Code Playgroud)
如果使用application.properties添加以下内容:
flyway.baselineOnMigrate = true
Run Code Online (Sandbox Code Playgroud)
是不可能的.我今天花了一些时间分析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;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我在这里有两个Spring配置文件.一个默认情况下不会清理数据库,另一个默认情况下会清理数据库.非常便利.
小智 7
我成功使用了FlywayMigrationStrategy.
@Component
public class BaselineOnMigrateMigrationStrategy implements FlywayMigrationStrategy {
@Override
public void migrate(Flyway flyway) {
flyway.setBaselineOnMigrate(true);
flyway.migrate();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 onapplication.properties文件,但您需要spring.为 springboot 2添加前缀,例如在此答案注释中标记的 @pdem /sf/answers/2747086821/。
spring.flyway.baseline-on-migrate=true
| 归档时间: |
|
| 查看次数: |
17773 次 |
| 最近记录: |