0
我正在使用Spring Boot 1.4.1.RELEASE和Flyway。Flyway架構遷移失敗,DML和DDL腳本
在執行模式遷移時,Flyway無法執行DML腳本。
我的資源文件夾具有以下結構遷飛:
一個空數據庫上執行遷飛路線,做工精細。它爲數據庫創建模式和數據。
但有一次,架構遷移(即,在DML和DDL腳本改變)應執行,遷徙路徑顯示了以下錯誤消息:
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
它說有一個失敗的遷移。在空數據庫上執行時應該有一些錯誤。你可以發佈他們嗎? – bekce
我想我找到了Flyway失敗的原因:它無法刪除數據庫中的以前條目! Flyway如何配置,以便在插入新數據之前刪除舊條目? – ThomasW
你只需在一個sql文件中寫入語句,如'delete from my_table where ...' – bekce