设置Flyway' baselineOnMigrate'和' baselineVersion'使用spring启动属性文件

时间:2015-10-09 03:14:56

标签: spring-boot flyway

Spring Boot的FlywayProperties.java支持许多Flyway设置,但不支持' baselineVersion'或者' baselineOnMigrate'。我正在将现有的应用程序转换为Flyway,这些设置似乎是为此目的而设计的。我们的生产环境受到高度控制,并在那里运行一个命令行版本的flyway来实现这一点是不切实际的。

创建自定义Flyway @Bean是唯一的选择吗?

6 个答案:

答案 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