如何在 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 迁移
TypeORM - 如何在生产模式下创建新表并自动运行迁移?
在 Django 1.7 迁移之前运行 South 迁移的推荐方法是啥?