代码之家  ›  专栏  ›  技术社区  ›  San Jaisy

试图调用不存在com的方法。github。克劳德洛克。蒙哥克。SpringMongockBuilderBase。lambda$getMongoTemplateProxySupplier

  •  0
  • San Jaisy  · 技术社区  · 5 年前

    使用Mongock https://github.com/cloudyrock/mongock 对于数据迁移,spring boot 2.3.1。RELEASE之前使用的是Mongobe,但由于此错误 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()
    }
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   San Jaisy    5 年前

    问题在于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
        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();
        }
    

    参考

    https://github.com/cloudyrock/mongock/issues/195

        2
  •  1
  •   TuGordoBello Sebastian Thees    5 年前

    除了San的答案之外 issue 可能更有用。(请注意,您应该将Mongock的版本更新为4.1.2.BETA)

    在这里,您可以看到不需要自己构建bean,只需使用 @EnableMongock ,它会帮你的。

    也值得一看 sample project