引起原因:java.lang.NoSuchMethodError:org.springframework.data.mongodb.core.MongoTemplate。<init>(Lcom / mongodb / Mongo; Ljava / lang / String;)V

时间:2018-12-03 11:11:13

标签: java mongodb maven spring-boot mongobee

尝试运行Spring-boot应用程序(v2.1.0)时出现以下错误:

  

说明:   

  尝试调用方法org.springframework.data.mongodb.core.MongoTemplate。(Lcom / mongodb / Mongo; Ljava / lang / String;)V,但该方法不存在。它的类org.springframework.data.mongodb.core.MongoTemplate可从以下位置获得:   

      文件:/ C:/Users/npatil/.m2/repository/org/springframework/data/spring-data-mongodb/2.1.2.RELEASE/spring-data-mongodb-2.1.2.RELEASE.jar!/ org / springframework / data / mongodb / core / MongoTemplate.class   

  它是从以下位置加载的:   

      文件:/ C:/Users/npatil/.m2/repository/org/springframework/data/spring-data-mongodb/2.1.2.RELEASE/spring-data-mongodb-2.1.2.RELEASE.jar   

  行动:   

  更正应用程序的类路径,以使其包含org.springframework.data.mongodb.core.MongoTemplate

的单个兼容版本。

下面是我pom的片段:

<dependencies>
.
.
  <dependency>
    <groupId>com.github.mongobee</groupId>
    <artifactId>mongobee</artifactId>
    <version>0.13</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>2.1.2.RELEASE</version>
  </dependency>
.
.
</dependencies>

可能会帮助您解决的一些罐子的版本是:
spring-data-mongodb2.1.2.RELEASE
spring-web5.1.2.RELEASE
mongo-java-driver3.8.2.RELEASE

已删除.m2并完成了mvn clean install,但是即使那样也不能解决问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

看起来像jar损坏或丢失, 检查所有与弹簧相关的罐子均为4.x或更高版本 如果可行,那么:
  Mongobee依赖于Spring 4.x jar,这可能与Spring boot 2.x冲突

尝试以下方式

  @Bean
  public Mongobee mongobee(){
    Mongobee mongobee = new Mongobee("mongodb://localhost:27017/seed");
    mongobee.setChangeLogsScanPackage(InitialData.class.getPackageName());
            mongobee.setMongoTemplate(template);

    return mongobee;
  }

答案 1 :(得分:0)

如果使用Springboot 2,则需要将Mongobee更改为Mongock。语法几乎相同,因为Mongock项目是Mongobee项目的延续。

Springboot:

@Bean
public SpringBootMongock mongock(ApplicationContext springContext, MongoClient mongoClient) {
  return (SpringBootMongock) new SpringBootMongockBuilder(mongoClient, "yourDbName", "com.package.to.be.scanned.for.changesets")
      .setApplicationContext(springContext) 
      .setLockQuickConfig()
      .build();
}

春季:

@Bean
public SpringMongock mongock() {
  MongoClient mongoclient = new MongoClient(new MongoClientURI("yourDbName", yourMongoClientBuilder));
  return new SpringMongockBuilder(mongoclient, "yourDbName", "com.package.to.be.scanned.for.changesets")
      .setLockQuickConfig()
      .build();
}