每次在WAR和IDE之间切换运行模式时,带有弹簧引导的Flyway都会覆盖整个数据库

时间:2018-05-17 13:12:31

标签: spring-boot flyway

在将flyway数据库迁移与spring boot应用程序集成时,我面临着非常奇怪的问题。

当我使用命令行从可执行WAR运行应用程序时,它会在应用程序启动时创建新的DB。 现在,如果我将应用程序运行模式切换到IDE(即从STS运行),它将再次从我的db/migration文件夹中触发所有脚本。我可以看到installed_on列时间每次在这两种运行模式之间切换时都会发生变化。我尝试过启用baselineOnMigrate属性,但没有对它产生任何影响。 你认为它的东西与spring boot嵌入式tomcat有关吗?因为在两次运行时都会创建嵌入的单个tomcat。

请在下面找到我的spring boot application.properties:

mssql.dbname=issueDB
mssql.password=password
mssql.dbserver=localhost
mssql.port=1501

spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://${mssql.dbserver}:${mssql.port};databaseName=${mssql.dbname}
spring.datasource.username=user
spring.datasource.password=${mssql.password}

spring.flyway.baselineOnMigrate=true
spring.flyway.locations=classpath:db/migration/testissue
spring.flyway.out-of-order=true
spring.flyway.baseline-version=1.3
spring.flyway.placeholder-prefix=$
spring.flyway.placeholder-suffix=$
spring.flyway.mixed=true
spring.flyway.cleanOnValidationError=true

1 个答案:

答案 0 :(得分:1)

我想,这可能是由此属性spring.flyway.cleanOnValidationError=true引起的。根据{{​​3}}:

  

发生验证错误时是否自动调用clean。

     

这仅仅是为了方便开发。即使很难,我们也强烈建议您在检查SCM并运行后不要更改迁移脚本,这提供了一种以平滑方式处理此案例的方法。数据库将自动擦除,确保下一次迁移将使您返回检入SCM的状态。

如果您在同一个数据库上以不同的方式运行应用程序,并且只需清理数据库并使用当前脚本状态覆盖它,可能会遇到一些验证问题。