【发布时间】:2017-06-03 05:58:42
【问题描述】:
我正在使用 Spring Boot 1.4.1.RELEASE 和 Flyway。
Flyway 在执行架构迁移时无法执行 DML 脚本。
我的资源文件夹的 Flyway 结构如下:
在空数据库上执行 Flyway,工作正常。它为数据库创建架构和数据。
但是一旦执行架构迁移(即更改 DML 和 DDL 脚本),Flyway 会显示以下错误消息:
Caused by: org.flywaydb.core.api.FlywayException: Schema `testDB` contains a failed migration to version 1.02 !
at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:196) ~[flyway-core-3.2.1.jar:na]
at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:156) ~[flyway-core-3.2.1.jar:na]
at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72) ~[flyway-core-3.2.1.jar:na]
at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:156) ~[flyway-core-3.2.1.jar:na]
at org.flywaydb.core.Flyway$1.execute(Flyway.java:1059) ~[flyway-core-3.2.1.jar:na]
at org.flywaydb.core.Flyway$1.execute(Flyway.java:1006) ~[flyway-core-3.2.1.jar:na]
at org.flywaydb.core.Flyway.execute(Flyway.java:1418) ~[flyway-core-3.2.1.jar:na]
at org.flywaydb.core.Flyway.migrate(Flyway.java:1006) ~[flyway-core-3.2.1.jar:na]
at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66) ~[spring-boot-autoconfigure-1.4.1.RELEASE.jar:1.4.1.RELEASE]
我的 application-dev.properties 看起来像这样:
flyway.enabled=true
flyway.url: jdbc:mysql://localhost:3306
flyway.user: usertest
flyway.password: testtest
flyway.schemas=testDB
flyway.baseline-on-migrate=true
flyway.locations:classpath:/db/migration/dev,/db/data
# Naming strategy
spring.jpa.hibernate.naming.strategy= org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql = true
logging.level.org.hibernate.SQL=debug
spring.jpa.hibernate.format_sql=true
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
spring.jpa.generate-ddl = false
spring.jpa.hibernate.ddl-auto =none
【问题讨论】:
-
它说迁移失败。在空数据库上执行时应该有一些错误。可以发一下吗?
-
我想我找到了 Flyway 失败的原因:它无法删除数据库中以前的条目! Flyway 如何配置以便在插入新数据之前删除旧条目?
-
你只需在
delete from my_table where ...这样的sql文件中编写语句 -
这不是一个选项。我通过使用 Spring Bean 并调用 Flyway 类的 clean 方法解决了这个问题。
标签: spring-boot flyway