我试图找到以下问题的解决方案,但它们都没有为我工作。我正在使用 MySQL + flyway 开发 Angular + Spring Boot 应用程序。请指导这里出了什么问题。
type A struct {
X string
Y int
*A
}
application.properties
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Validate failed. Migration Checksum mismatch for migration 2
-> Applied to database : 1499248173
-> Resolved locally : -1729781252
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:829) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:764) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:357) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:305) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1124) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1113) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at com.boot.App.main(App.java:9) [classes/:na]
Caused by: org.flywaydb.core.api.FlywayException: Validate failed. Migration Checksum mismatch for migration 2
-> Applied to database : 1499248173
-> Resolved locally : -1729781252
at org.flywaydb.core.Flyway.doValidate(Flyway.java:1108) ~[flyway-core-3.2.1.jar:na]
at org.flywaydb.core.Flyway.access$300(Flyway.java:62) ~[flyway-core-3.2.1.jar:na]
at org.flywaydb.core.Flyway$1.execute(Flyway.java:1012) ~[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.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
... 18 common frames omitted
的pom.xml
logging.level.org.springframework.web=DEBUG
server.port=8080
spring.h2.console.enabled=true
spring.h2.console.path=/h2
## For H2 DB
#spring.datasource.url=jdbc:h2:file:~/dasboot
#spring.datasource.username=sa
#spring.datasource.password=
#spring.datasource.driver-class-name=org.h2.Driver
## For MYSQL DB
spring.datasource.url=jdbc:mysql://localhost:3306/dasboot
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=10
spring.datasource.max-idle=8
spring.datasource.max-wait=10000
spring.datasource.min-evictable-idle-time-millis=1000
spring.datasource.min-idle=8
spring.datasource.time-between-eviction-runs-millis=1
flyway.baseline-on-migrate=true
spring.jpa.hibernate.ddl-auto=false;
#datasource.flyway.url=jdbc:h2:file:~/dasboot
#datasource.flyway.username=sa
#datasource.flyway.password=
#datasource.flyway.driver-class-name=org.h2.Driver
datasource.flyway.url=jdbc:mysql://localhost:3306/dasboot
datasource.flyway.username=root
datasource.flyway.password=root
datasource.flyway.driver-class-name=com.mysql.jdbc.Driver
V2__create_shipwreck.sql
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.1.RELEASE</version>
</parent>
<name>das-boot</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
答案 0 :(得分:43)
Flyway正在将SQL脚本的校验和与先前运行的校验和的校验和进行比较。如果更改已由Flyway应用的SQL脚本,则通常会发生此异常,从而导致校验和不匹配。
如果这是开发,您可以删除数据库并从头开始迁移。
如果您正在制作中,请不要编辑已应用的SQL脚本。只创建新的SQL脚本。
答案 1 :(得分:12)
最好的解决方案是执行以下步骤:
再次运行项目,登录h2和 删除名为“schema_version”的表。
drop table schema_version;
现在用ddl创建V2__create_shipwreck.sql文件,然后重新运行该项目。
请记住这一点,在pom.xml中为flyway-core添加版本4.1.2,如
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>4.1.2</version>
</dependency>
现在应该可以了。希望这会有所帮助。
答案 2 :(得分:7)
我只是从schema_version中删除偏离要应用的迁移的迁移。这样你就不会丢弃任何你可能拥有的测试数据。
例如:
SELECT * from schema_version order by installed_on desc
V_005_five.sql
V_004_four.sql
V_003_three.sql
V_002_two.sql
V_001_one.sql
要应用的迁移
V_005_five.sql
* V_004_addUserTable.sql *
V_003_three.sql
V_002_two.sql
V_001_one.sql
这里的解决方案是从schema_version中删除
V_005_five.sql
V_004_four.sql
AND还原导致的任何数据库更改。例如,如果架构创建了新表,则必须在运行迁移之前删除该表。
当您运行flyway时,它将仅重新应用
V_005_five.sql
* V_004_addUserTable.sql *
新的schema_version将是
V_005_five.sql
* V_004_addUserTable.sql *
V_003_three.sql
V_002_two.sql
V_001_one.sql
希望有所帮助
答案 3 :(得分:7)
我遇到了同样的问题并从数据库中删除了完整的架构,但问题仍然存在。
我通过运行flyway的repair()
命令解决了这个问题:
flyway.repair();
或者使用Flyway Maven插件:
mvn flyway:repair
将maven插件添加到pom.xml中:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>5.2.4</version>
</plugin>
顺便说一句:我没找到到底出了什么问题。
答案 4 :(得分:3)
在本地数据库中使用此查询。
从schema_version选择* 从schema_version删除,其中 checksum列 = -1729781252;
注意:-1729781252是“本地解析”值。
构建并启动服务器。
答案 5 :(得分:3)
当我在本地系统中遇到此问题时,这是对我有用的解决方案。
答案 6 :(得分:1)
如果您不在生产中,您可以查看数据库中的flywayTable
并删除包含已应用脚本名称的行。
flywayTable
是一个项目选项,用于定义flyway使用的数据库中的表名,其中包含有关此数据库版本的信息,已应用的脚本...
答案 7 :(得分:1)
实际上还有另一种解决方案,但它是一种解决方法,不应该在正确管理的项目中完成。然而,我遇到了一种情况,那里无法走上更好的道路:)
您可以更新schame_version表,并实际将校验和更改为新校验和。这将导致迁移通过,但可能会产生其他副作用。
当部署到不同的环境(测试,uat,prod等)时,可能会发生,您必须在更多环境中更新相同的校验和。当谈到gitflow和发布分支时,你可以很容易地混淆整体。
答案 8 :(得分:1)
只需添加
spring.flyway.enabled=false
如果您不希望flyway每次运行应用程序时检查校验和,请在application.properties文件中输入。
答案 9 :(得分:0)
只是不验证:
flyway.setValidateOnMigrate(false);
答案 10 :(得分:0)
有3种方法可以在开发时解决此问题。下面的任何人都可以解决此问题。
1)在版本递增的新迁移sql文件中提供更改
2)更改我们提供的数据库url中的架构名称
datasource.flyway.url = jdbc:h2:file:〜/ cart3
datasource.flyway.url = jdbc:h2:file:〜/ cart4
3)删除用户主目录中的.mv和.trace文件
例如:c:// users / username /
答案 11 :(得分:0)
我遇到了同样的问题,并尝试了所有选项(删除架构,删除特定行,更新校验和),但是没有任何效果。
在我的情况下,flyway-core依赖因某种原因被破坏了。
解决方案:
从〜.m2 \本地存储库路径... \ org \ flywaydb \ flyway-core中删除flyway-core文件夹。
执行“ maven全新安装”,以便它将下载新的更新并将其添加到项目中。
我希望这会有所帮助。
答案 12 :(得分:0)
遇到此问题时,我所做的就是连接到数据库并更新与错误版本相对应的校验和字段,并将该值放置在FlyWay本地解析的位置。
针对以下错误:
nested exception is org.flywaydb.core.api.FlywayException: Validate failed.
Migration Checksum mismatch for migration 1.12
-> Applied to database : 1029320280
-> Resolved locally : -236187247
我只是这样做:
UPDATE schema_version SET checksum = -236187247 WHERE version_rank = 12 AND checksum = 1029320280;
问题解决了。
注意::您必须确保架构实际上是正确的,检查表及其结构,如果一切正常,则可以应用此解决方案;否则,您应该首先使用纯SQL和本机SQL手动修复模式。
答案 13 :(得分:0)
如果您在生产中遇到问题,则必须具有 V2__create_shipwreck.sql ,该版本与最新版本中未修改的版本相同。
然后校验和将再次正确
答案 14 :(得分:0)
我遇到了同样的问题,我相信这是由于linux和Windows(也包括mac)之间的校验和而发生的。
您可以flite -t "text i want to read"
在飞行通道中命令。
use repair()
请注意,如果您处于生产环境中,请确保未更改迁移SQL文件;因为当您运行flyway.repair();
时,这意味着您向flyway说您对迁移版本及其校验和有把握,然后由flyway对其进行修复!
答案 15 :(得分:0)
1-删除迁移文件。 2-连接到数据库并删除迁移创建的表。 3-使用正确的sql重新创建迁移文件。
答案 16 :(得分:0)
简单的解决方案是将application.properties中的spring.datasource.url = jdbc:h2:file:〜/ dasboot更改为新文件名,例如:spring.datasource.url = jdbc:h2:file:〜/ dasboots
答案 17 :(得分:0)
如果您确定SQL文件中的修改对现有架构没有影响,则还可以更新现有架构的校验和。
我在对sql文件稍作更改后进行了此操作。
这是我更新校验和的方法:
update flyway_schema_history set checksum = '-1934991199' where installed_rank = '1';
答案 18 :(得分:0)
Flyway将其计算校验和的方式从版本3更改为版本5。您可以重新计算校验和。由于Flyway插件无法正确读取Spring数据源属性,因此您必须在命令行(or one of the other various ways Flyway accepts)上手动指定它们。
mvn flyway:repair -Dflyway.user=root -Dflyway.password= -Dflyway.url=jdbc:mysql://localhost:3306/mydatabase -Dflyway.table=schema_version
Flyway还更改了存储校验和的表,因此您还必须指定flyway-table=schema_version
才能使用旧表,否则它将发出警告(版本6中可能有错误)。
[INFO] Repairing Schema History table for version 2 (Description: create sources, Type: SQL, Checksum: 2125962141) ...
[INFO] Repairing Schema History table for version 3 (Description: create stats, Type: SQL, Checksum: 389912194) ...
[INFO] Repairing Schema History table for version 4 (Description: add user encrypted, Type: SQL, Checksum: 182607572) ...
答案 19 :(得分:0)
更新您的schema_version记录,以便在本地解决问题&#34;你的情况下的价值是-1729781252