需要设置一个配置文件,让 Flyway 在重新启动时清理数据库

Posted

技术标签:

【中文标题】需要设置一个配置文件,让 Flyway 在重新启动时清理数据库【英文标题】:Need to setup a profile which gets Flyway to clean the database on re-start 【发布时间】:2021-12-19 02:24:56 【问题描述】:

当我使用用于集成测试的配置文件运行我的 Spring Boot 应用程序时,我想从一个干净的数据库开始。应用程序在它自己的 JVM 中运行,而集成测试在另一个 JVM 中运行。似乎添加:

spring.flyway.clean-disabled=false

到集成属性文件应该可以解决问题,但它不起作用。 文档说spring.flyway.clean-disabled 的默认设置是false,这意味着如果我没有在我的任何属性文件中设置spring.flyway.clean-disabled,那么每次我启动我的应用程序时,我应该得到一个空数据库。但事实并非如此。数据库的内容在应用程序启动之间保持不变。 那么需要做什么才能用干净的数据库启动应用程序呢?我正在使用 Spring Boot 2.3.1.RELEASE。

【问题讨论】:

【参考方案1】:

文档说spring.flyway.clean-disabled 的默认设置是false,这意味着如果我没有在我的任何属性文件中设置spring.flyway.clean-disabled,那么每次我启动我的应用程序时,我应该得到一个空的数据库。

不,您不应该在每次启动应用程序时都得到一个空数据库。 Flyway 是一个数据库迁移工具。如果它默认在每次应用程序启动时完全清除您的数据库,那将是相当尴尬的。

与migrate 命令(由Spring Boot 在应用程序启动时自动调用)相比,clean 是一个主要在开发和测试期间有用的命令。您必须显式调用它(例如通过Maven / Gradle)。

cleanDisabled 参数只是一种保护措施,可以配置为防止在生产环境中执行clean 命令。

【讨论】:

我想在 intellij 中运行我的应用程序,这样我就可以在运行集成测试时对其进行调试,并且每次运行它时我都想从一个干净的数据库开始。在程序参数上设置 -DFLYWAY_CLEAN_DISABLED=false 或在环境中设置 FLYWAY_CLEAN_DISABLED=false 不起作用。不使用 maven/gradle 还有其他方法吗?

以上是关于需要设置一个配置文件,让 Flyway 在重新启动时清理数据库的主要内容,如果未能解决你的问题,请参考以下文章

linux vim设置在重新启动软件后失效,需要重新设置才行

启动tomcat后,每次修改java文件都会重新加载整个应用(像重新部署),怎么修改让它不重新加载!

将 Flyway 设置为在 Spring Boot 中使用不同的环境

flyway的快速入门教程

如何一起使用Spring启动,JOOQ和Flyway?

flyway的多个配置文件