使用Mongock https://github.com/cloudyrock/mongock进行数据迁移spring boot 2.3.1版本,之前使用Mongobee,但由于这个错误org.springframework.beans.factory.UnsatisfiedDependencyException:Error creating bean with name 'mongoTemplate'和每个人的建议切换到Mongock An attempt was made to call a method that does not exist, mongo-java-driver , mongobee
现在我正在使用Mongock进行数据迁移,但不断收到错误
An attempt was made to call a method that does not exist. The attempt was made from the following location:
com.github.cloudyrock.mongock.SpringMongockBuilderBase.lambda$getMongoTemplateProxySupplier$0(SpringMongockBuilderBase.java:138)
The following method did not exist:
'org.springframework.data.mongodb.MongoDbFactory org.springframework.data.mongodb.core.MongoTemplate.getMongoDbFactory()'
The method's class, org.springframework.data.mongodb.core.MongoTemplate, is available from the following locations:
jar:file:/Users/macbook/.gradle/caches/modules-2/files-2.1/org.springframework.data/spring-data-mongodb/3.0.1.RELEASE/24961d107813268bb9cd3daa8d4a9389060faea7/spring-data-mongodb-3.0.1.RELEASE.jar!/org/springframework/data/mongodb/core/MongoTemplate.class
The class hierarchy was loaded from the following locations:
org.springframework.data.mongodb.core.MongoTemplate: file:/Users/macbook/.gradle/caches/modules-2/files-2.1/org.springframework.data/spring-data-mongodb/3.0.1.RELEASE/24961d107813268bb9cd3daa8d4a9389060faea7/spring-data-mongodb-3.0.1.RELEASE.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of org.springframework.data.mongodb.core.MongoTemplate这是由于我知道但不知道如何解决的依赖项导致的错误
plugins {
id 'org.springframework.boot' version '2.3.1.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'fete.bird'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '14'
compileJava {
options.compilerArgs += ["--enable-preview"]
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "Hoxton.SR6")
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-rest'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
implementation 'org.springdoc:springdoc-openapi-ui:1.4.3'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
compile "org.mongodb:mongo-java-driver:3.12.6"
compile("com.github.cloudyrock.mongock:mongock-spring:3.3.2") {
exclude group: 'org.mongodb', module: 'mongo-java-driver'
}
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
test {
useJUnitPlatform()
}发布于 2020-07-15 18:58:10
这个问题是关于mongock:mongock,更新到最新的Beta版本,这个问题通过添加工作得到了解决。
删除所有mongock依赖项并添加以下依赖项
compile "com.github.cloudyrock.mongock:mongock-bom:4.1.2.BETA"
compile 'com.github.cloudyrock.mongock:mongock-spring-v5:4.1.2.BETA'
compile 'com.github.cloudyrock.mongock:mongodb-springdata-v3-driver:4.1.2.BETA'现在对Bean进行了如下更改
@Bean
public MongockSpring5.MongockInitializingBeanRunner mongockInitializingBeanRunner(ApplicationContext springContext, MongoTemplate mongoTemplate) {
boolean migrationsEnabled = Boolean.parseBoolean(environment.getProperty("app.db.migrations.enabled"));
return MongockSpring5.builder()
.setDriver(new SpringDataMongo3Driver(mongoTemplate,4,4,3))
.addChangeLogsScanPackages(List.of("fete.bird.fetebirdproduct.migration"))
.setSpringContext(springContext)
.setEnabled(migrationsEnabled)
.buildInitializingBeanRunner();
}参考文献
发布于 2020-07-15 21:37:55
除了San的回答之外,这个issue可能更有用。(请注意,您应该将Mongock的版本更新到4.1.2.BETA)
在这里,您可以看到您不需要自己构建bean,只需使用@EnableMongock注释Spring应用程序,它就可以为您完成工作。
同样值得关注的是这个sample project
https://stackoverflow.com/questions/62908825
复制相似问题