在将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
答案 0 :(得分:1)
我想,这可能是由此属性spring.flyway.cleanOnValidationError=true
引起的。根据{{3}}:
发生验证错误时是否自动调用clean。
这仅仅是为了方便开发。即使很难,我们也强烈建议您在检查SCM并运行后不要更改迁移脚本,这提供了一种以平滑方式处理此案例的方法。数据库将自动擦除,确保下一次迁移将使您返回检入SCM的状态。
如果您在同一个数据库上以不同的方式运行应用程序,并且只需清理数据库并使用当前脚本状态覆盖它,可能会遇到一些验证问题。