java - Mongock 迁移无法运行 mongockSpringLegacyMigration
问题描述
我正在尝试运行 mongock 以使用版本控制来处理我的数据库迁移,但是从 mongock 基础架构中得到了一个异常,另外请注意我没有使用 spring-boot 只使用 spring bean 系统,我没有选择使用 spring boot。 ..
Pom 和代码片段:
<dependency>
<groupId>com.github.cloudyrock.mongock</groupId>
<artifactId>mongock-standalone</artifactId>
<version>4.1.19</version>
</dependency>
<dependency>
<groupId>com.github.cloudyrock.mongock</groupId>
<artifactId>mongodb-springdata-v2-driver</artifactId>
<version>4.1.19</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.8.2</version>
</dependency>
代码:
@Configuration
@Import({MongoSelectorContext.class})
public class MongockBeans {
private final MongoSelectorContext mongoSelectorContext;
public MongockBeans(MongoSelectorContext mongoSelectorContext) {
this.mongoSelectorContext = mongoSelectorContext;
}
@Bean
public void updateMongoTemplateSchema() {
MongoTemplate mongoTemplate = mongoSelectorContext.mongoTemplateProvider().getMongoTemplateByDatabaseAlias("test");
MongockStandalone.builder()
.setDriver(SpringDataMongo2Driver.withDefaultLock(mongoTemplate))
.addChangeLogClass(TestChangeLog.class)
.buildRunner().execute();
}
}
Mongo 模板按应有的方式提供 但我收到以下错误,错误是从 mongock 而不是我的变更集引发的,它甚至不执行我的变更集。任何帮助都会有帮助
Exception in thread "main" java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongockBeans': Invocation of init method failed; nested exception is io.changock.migration.api.exception.ChangockException: Error in method[MongockV3LegacyMigrationChangeRunAlwaysLog.mongockSpringLegacyMigration] : Wrong parameter[MongockLegacyMigration] with name: legacy-migration
at com.citi.qi.core.platform.CorePlatformLauncher.start(CorePlatformLauncher.java:39)
at com.citi.quickinsight.evaluation.engine.EngineMain.main(EngineMain.java:35)
...
Caused by: io.changock.migration.api.exception.ChangockException: Error in method[MongockV3LegacyMigrationChangeRunAlwaysLog.mongockSpringLegacyMigration] : Wrong parameter[MongockLegacyMigration] with name: legacy-migration
at io.changock.runner.core.MigrationExecutor.processExceptionOnChangeSetExecution(MigrationExecutor.java:195)
at io.changock.runner.core.MigrationExecutor.processSingleChangeSet(MigrationExecutor.java:102)
at io.changock.runner.core.MigrationExecutor.lambda$processSingleChangeLog$2(MigrationExecutor.java:94)
at io.changock.runner.core.MigrationExecutor.executeInTransactionIfStrategyOrUsualIfNot(MigrationExecutor.java:80)
at io.changock.runner.core.MigrationExecutor.processSingleChangeLog(MigrationExecutor.java:94)
at io.changock.runner.core.MigrationExecutor.lambda$processAllChangeLogs$1(MigrationExecutor.java:88)
at io.changock.runner.core.MigrationExecutor.executeInTransactionIfStrategyOrUsualIfNot(MigrationExecutor.java:80)
at io.changock.runner.core.MigrationExecutor.processAllChangeLogs(MigrationExecutor.java:88)
at io.changock.runner.core.MigrationExecutor.lambda$executeMigration$0(MigrationExecutor.java:69)
at io.changock.runner.core.MigrationExecutor.executeInTransactionIfStrategyOrUsualIfNot(MigrationExecutor.java:80)
at io.changock.runner.core.MigrationExecutor.executeMigration(MigrationExecutor.java:69)
at io.changock.runner.core.ChangockBase.execute(ChangockBase.java:49)
at com.citi.quickinsight.MongockBeans.updateMongoTemplateSchema(MongockBeans.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
... 14 more
Caused by: io.changock.driver.api.common.DependencyInjectionException: Wrong parameter[MongockLegacyMigration] with name: legacy-migration
at io.changock.runner.core.MigrationExecutor.lambda$getParameter$4(MigrationExecutor.java:182)
at java.util.Optional.orElseThrow(Optional.java:290)
at io.changock.runner.core.MigrationExecutor.getParameter(MigrationExecutor.java:182)
at io.changock.runner.core.MigrationExecutor.executeChangeSetMethod(MigrationExecutor.java:171)
at io.changock.runner.core.MigrationExecutor.executeAndLogChangeSet(MigrationExecutor.java:127)
at io.changock.runner.core.MigrationExecutor.processSingleChangeSet(MigrationExecutor.java:100)
... 32 more
解决方案
这需要深入研究,但我猜你在开发环境中,你可以尝试这个解决方法,这只是暂时让你继续工作。
private MongockLegacyMigration getLegacyMigration() {
MongockLegacyMigration mongockLegacyMigration = new MongockLegacyMigration();
mongockLegacyMigration.setCollectionName("no-existing-collection");
return mongockLegacyMigration;
}
@PostConstruct
public MongockStandalone.Runner updateMongoTemplateSchema(MongoTemplate mongoTemplate) {
return MongockStandalone.builder()
.setDriver(SpringDataMongo2Driver.withDefaultLock(mongoTemplate))
.addChangeLogClass(ClientInitializerChangeLog.class)
.setLegacyMigration(getLegacyMigration())
.buildRunner();
}
请注意,您提供的是不存在的 legacyMigration。这不是正确/最终的解决方案,但不会受到伤害,并且由于您处于开发阶段(我的假设),这可以让您继续工作。
推荐阅读
- c# - iTextSharp 表格单元格跨度
- firebase - Firebase 身份验证 - 过期的 api 密钥
- docker - docker-compose.yml 内容 - 如何避免“必须是映射而不是字符串”错误消息?
- node.js - Node.js 使用 replace() 和正则表达式删除 HTML
- android - 如何使用 for 循环以编程方式创建 LinearLayout
- javascript - 使用 ajax 设置和调用全局变量
- c - 使用 FATfs 的 STMF4 和 USB OTG
- r - R,使用 textrank 提取键值 - 错误 ConstructTextGraph
- python - 如何解析 JSON 响应(python)。以下是 POSTMAN 的结果。我希望“displayvalue”在内部使用
- javascript - 无法获取 javascript 函数的这一点