如何在 SpringBoot 应用程序迁移之前运行 flyway:clean?

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何在 SpringBoot 应用程序迁移之前运行 flyway:clean?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 应用程序在启动时未运行 Flyway 迁移

石墨烯代码在 Django 数据迁移之前运行

TypeORM - 如何在生产模式下创建新表并自动运行迁移?

在 Django 1.7 迁移之前运行 South 迁移的推荐方法是啥?

自定义捆绑迁移在首次安装时失败,因为它们在 OroCommerce 的安装程序之前运行

如何在 Docker 中运行 Sequelize 迁移