You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Flyway+MySQL启动Spring Boot应用时遇无效迁移状态错误

问题:Flyway启动时提示无效迁移状态'ignored'

启动基于Flyway和MySQL的Spring Boot应用时,抛出以下错误:

Caused by: org.flywaydb.core.api.FlywayException: Invalid migration state 'ignored'. Valid states are: [*, missing, pending, ıgnored, future]
    at org.flywaydb.core.api.pattern.ValidatePattern.fromPattern(ValidatePattern.java:70) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.internal.util.ValidatePatternUtils.lambda$isIgnoredIgnored$3(ValidatePatternUtils.java:31) ~[flyway-core-9.14.1.jar:na]
    at java.base/java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90) ~[na:na]
    at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:1002) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
    at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230) ~[na:na]
    at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:632) ~[na:na]
    at org.flywaydb.core.internal.util.ValidatePatternUtils.isIgnoredIgnored(ValidatePatternUtils.java:31) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.internal.info.MigrationInfoContext.isIgnoredIgnored(MigrationInfoContext.java:43) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.internal.info.MigrationInfoImpl.validate(MigrationInfoImpl.java:251) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.internal.info.MigrationInfoServiceImpl.validate(MigrationInfoServiceImpl.java:511) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.internal.command.DbValidate.lambda$validate$0(DbValidate.java:111) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.internal.jdbc.TransactionalExecutionTemplate.execute(TransactionalExecutionTemplate.java:55) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.internal.command.DbValidate.validate(DbValidate.java:101) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.Flyway.doValidate(Flyway.java:365) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.Flyway.lambda$migrate$0(Flyway.java:133) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:196) ~[flyway-core-9.14.1.jar:na]
    at org.flywaydb.core.Flyway.migrate(Flyway.java:129) ~[flyway-core-9.14.1.jar:na]
    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66) ~[spring-boot-autoconfigure-3.0.2.jar:3.0.2]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1797) ~[spring-beans-6.0.4.jar:6.0.4]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1747) ~[spring-beans-6.0.4.jar:6.0.4]
    ... 18 common frames omitted

项目pom.xml配置片段:

<groupId>net.sayilir</groupId>
<artifactId>spring-application</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-application</name>
<description>An example project demonstrates testing Spring Kafka</description>

<properties>
    <java.version>17</java.version>
    <flyway.version>9.14.1</flyway.version>
    <flyway.url>jdbc:mysql://localhost:3306/test</flyway.url>
    <flyway.user>***</flyway.user>
    <flyway.password>***</flyway.password>
</properties>

已尝试执行以下命令,问题未解决:

  • ./mvnw flyway:clean
  • ./mvnw flyway:repair

解决方法

1. 问题根源

错误信息中显示有效状态包含ıgnored(土耳其语带点的小写i),而错误提示的是英文ignored,这是字符编码/区域设置导致的字符转换问题——若系统Locale为土耳其语,会自动将英文i转换为土耳其语ı,导致Flyway识别状态失败。

2. 具体修复步骤

  • 临时修改启动Locale:启动应用时添加JVM参数强制使用英文区域:
    -Duser.language=en -Duser.country=US
    
  • 检查Flyway配置:查看application.properties/application.yml中是否有自定义迁移状态配置,确保使用英文ignored而非土耳其语字符;若使用ignoreMigrationPatterns等参数,检查拼写是否正确。
  • 升级Flyway版本:该字符问题在Flyway 10.x及以上版本已修复,可将pom.xml中的flyway.version升级到最新稳定版。
  • 修改系统Locale:若长期使用,可将系统默认区域设置改为英文,避免字符自动转换问题。

内容的提问来源于stack exchange,提问作者omers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 09:48:08