Насколько я знаю, это довольно необычно, и я не могу найти root причину.
У меня есть служба, которую я развернул в одной из наших сред в Кубернетесе. Не удалось запустить со следующей ошибкой:
2020-02-27 11:41:44,178 [instance=] [main] INFO org.flywaydb.core.internal.util.VersionPrinter (Slf4jLog.java:44) - Flyway 3.2.1 by Boxfuse
2020-02-27 11:41:50,665 [instance=] [main] INFO org.flywaydb.core.internal.dbsupport.DbSupportFactory (Slf4jLog.java:44) - Database: jdbc:oracle:thin:@hostname:port/ENVIRONMENT (Oracle 12.2)
2020-02-27 11:41:52,460 [instance=] [main] INFO org.flywaydb.core.internal.command.DbValidate (Slf4jLog.java:44) - Validated 8 migrations (execution time 00:01.063s)
2020-02-27 11:41:53,128 [instance=] [main] WARN org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext (AbstractApplicationContext.java:551) - Exception encountered during context initialization - cancelling refresh attempt: 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 2019.4.1.1
-> Applied to database : 1659809745
-> Resolved locally : 1875162162
2020-02-27 11:41:53,129 [instance=] [main] INFO org.apache.catalina.core.StandardService (DirectJDKLog.java:180) - Stopping service [Tomcat]
2020-02-27 11:41:53,153 [instance=] [main] INFO org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer (AutoConfigurationReportLoggingInitializer.java:101) -
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2020-02-27 11:41:53,160 [instance=] [main] ERROR org.springframework.boot.SpringApplication (SpringApplication.java:771) - Application startup failed
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 2019.4.1.1
-> Applied to database : 1659809745
-> Resolved locally : 1875162162
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1080)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at com.domain.app.myapp.MyServiceApplication.main(MyServiceApplication.java:30)
Caused by: org.flywaydb.core.api.FlywayException: Validate failed. Migration Checksum mismatch for migration 2019.4.1.1
-> Applied to database : 1659809745
-> Resolved locally : 1875162162
at org.flywaydb.core.Flyway.doValidate(Flyway.java:1108)
at org.flywaydb.core.Flyway.access$300(Flyway.java:62)
at org.flywaydb.core.Flyway$1.execute(Flyway.java:1012)
at org.flywaydb.core.Flyway$1.execute(Flyway.java:1006)
at org.flywaydb.core.Flyway.execute(Flyway.java:1418)
at org.flywaydb.core.Flyway.migrate(Flyway.java:1006)
at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 18 more
Process finished with exit code 1
Я восстановил контрольные суммы с помощью mvn flyway:repair
и смог запустить службу локально. Хотя K8s все еще показывал похожую ошибку. На этот раз я взял эти контрольные суммы вручную из журналов ошибок экземпляра K8s (Resolved Locally
) и поместил эти контрольные суммы по одной в схему пролета. Это заставило работать экземпляр K8s, но теперь мой локальный экземпляр не может выдать ошибку контрольной суммы.
Есть идеи, где я мог бы использовать неправильный подход? Хост базы данных для локальных экземпляров и экземпляров K8 одинаков. Я не уверен, почему только один из них может проверить Миграции в одном заданном сценарии.
(я изменил имена файлов по очевидным причинам)