2017-01-18 44 views
0

我正在使用Spring Boot 1.4.1.RELEASE和Flyway。Flyway架構遷移失敗,DML和DDL腳本

在執行模式遷移時,Flyway無法執行DML腳本。

我的資源文件夾具有以下結構遷飛:

enter image description here

一個空數據庫上執行遷飛路線,做工精細。它爲數據庫創建模式和數據。

但有一次,架構遷移(即,在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 
+0

它說有一個失敗的遷移。在空數據庫上執行時應該有一些錯誤。你可以發佈他們嗎? – bekce

+0

我想我找到了Flyway失敗的原因:它無法刪除數據庫中的以前條目! Flyway如何配置,以便在插入新數據之前刪除舊條目? – ThomasW

+0

你只需在一個sql文件中寫入語句,如'delete from my_table where ...' – bekce

回答

0

這個例外只是意味着該組通過對遷移執行飛行路線確定了「新」的遷移中,一個或多個腳本導致錯誤。

Flyway創建一個表,它跟蹤執行的遷移腳本及其校驗和,您可以驗證該表,它應該在執行結果列中包含一個或多個「0」。

當您處於這種情況時(在本地到開發階段),您仍然可以簡單地刪除遷移表中不成功的行,更正引入的腳本,最後再次啓動flyway遷移。