【问题标题】:How to run flyway:clean before migrations in a SpringBoot app?如何在 SpringBoot 应用程序迁移之前运行 flyway:clean?
【发布时间】:2015-08-30 01:54:17
【问题描述】:

我正在使用 Springboot 和 Flyway。迁移工作得很好,但我希望能够在应用程序上下文加载 test 配置文件时执行 clean flyway 命令。

如果活动配置文件是test,是否可以将SpringBoot配置为clean然后migrate

【问题讨论】:

    标签: spring-boot flyway


    【解决方案1】:

    您可以像这样覆盖 Flyway 自动配置:

    @Bean
    @Profile("test")
    public Flyway flyway(DataSource theDataSource) {
        Flyway flyway = new Flyway();
        flyway.setDataSource(theDataSource);
        flyway.setLocations("classpath:db/migration");
        flyway.clean();
        flyway.migrate();
    
        return flyway;
    }
    

    在 Spring Boot 1.3(当前版本为 1.3.0.M1,GA 版本计划于 9 月发布)中,您可以使用 FlywayMigrationStrategy bean 来定义要运行的操作:

    @Bean
    @Profile("test")
    public FlywayMigrationStrategy cleanMigrateStrategy() {
        FlywayMigrationStrategy strategy = new FlywayMigrationStrategy() {
            @Override
            public void migrate(Flyway flyway) {
                flyway.clean();
                flyway.migrate();
            }
        };
    
        return strategy;
    }
    

    【讨论】:

    • 您的解决方案有效,但如果服务器仅重新启动以进行热插拔,有没有办法避免这种行为?在开发过程中,没有必要删除整个数据库,事实上这很烦人。有解决办法吗?
    【解决方案2】:

    在更新版本的 Spring Boot(例如 2.0.2)中,如果由于 sql 文件的更改而想要使用 clean,则可以使用属性 spring.flyway.clean-on-validation-error

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 2023-03-16
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多