1

我正在尝试将 mongodb 从 3.x 升级到 4.x,因为我们需要在 mongodb 中支持事务,并且还需要将 fongo 用于 junits。我已经修改了以下给定依赖项的版本:

<spring-data-mongodb-version>2.1.0.RELEASE</spring-data-mongodb-version>
<spring-data-commons-version>2.1.0.RELEASE</spring-data-commons-version>
<spring-framework-version>5.0.8.RELEASE</spring-framework-version>
<mongo-java-driver>3.2.8</mongo-java-driver>
fongo -> 2.1.0

在给定的代码下面添加到TestConfig 类:

private static final MongoClient createNewMongo() {
    Fongo fongo = new Fongo("fongo");
    MongoClient mongo = fongo.getMongo();
    return mongo;
  }
@Override
  @Bean
  public MongoTemplate mongoTemplate() throws Exception {
    Fongo fongo = new Fongo("fongo");
    MongoClient mongo = fongo.getMongo();
    return new MongoTemplate(mongo, DATABASE_NAME);
  }

  @Bean
  public MongoClient mongoClient() {
    MongoCredential mongoCredential = MongoCredential
        .createMongoCRCredential("ext-catalog", "ext-catalog",
            "ext-catalog".toCharArray());
    List<MongoCredential> credentialsList = new ArrayList<>();
    credentialsList.add(mongoCredential);

    ServerAddress serverAddress = null;
    try {
      serverAddress = new ServerAddress("localhost" , 27017 );
    } catch (Exception e) {
      e.printStackTrace();
    }
    return new MongoClient(serverAddress, credentialsList);
  }

低于给定错误:

java.lang.NoClassDefFoundError: com/mongodb/FongoMongoDatabase
    at com.mongodb.MockMongoClient.getDatabase(MockMongoClient.java:88) ~[fongo-2.1.0.jar:na]
    at org.springframework.data.mongodb.core.SimpleMongoDbFactory.doGetMongoDatabase(SimpleMongoDbFactory.java:105) ~[spring-data-mongodb-2.1.0.RELEASE.jar:2.1.0.RELEASE]
    at org.springframework.data.mongodb.core.MongoDbFactorySupport.getDb(MongoDbFactorySupport.java:107) ~[spring-data-mongodb-2.1.0.RELEASE.jar:2.1.0.RELEASE]
    at org.springframework.data.mongodb.core.MongoDbFactorySupport.getDb(MongoDbFactorySupport.java:95) ~[spring-data-mongodb-2.1.0.RELEASE.jar:2.1.0.RELEASE]
    at org.springframework.data.mongodb.MongoDatabaseUtils.doGetMongoDatabase(MongoDatabaseUtils.java:108) ~[spring-data-mongodb-2.1.0.RELEASE.jar:2.1.0.RELEASE]
    at org.springframework.data.mongodb.MongoDatabaseUtils.getDatabase(MongoDatabaseUtils.java:68) ~[spring-data-mongodb-2.1.0.RELEASE.jar:2.1.0.RELEASE]
    at org.springframework.data.mongodb.core.MongoTemplate.doGetDatabase(MongoTemplate.java:2235) ~[spring-data-mongodb-2.1.0.RELEASE.jar:2.1.0.RELEASE]
    at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:534) ~[spring-data-mongodb-2.1.0.RELEASE.jar:2.1.0.RELEASE]
    at org.springframework.data.mongodb.core.DefaultIndexOperations.execute(DefaultIndexOperations.java:218) ~[spring-data-mongodb-2.1.0.RELEASE.jar:2.1.0.RELEASE]
    at org.springframework.data.mongodb.core.DefaultIndexOperations.ensureIndex(DefaultIndexOperations.java:121) ~[spring-data-mongodb-2.1.0.RELEASE.jar:2.1.0.RELEASE]
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.createIndex(MongoPersistentEntityIndexCreator.java:145) ~[spring-data-mongodb-2.1.0.RELEASE.jar:2.1.0.RELEASE]

有什么办法可以解决吗?我发现一个链接说这两个不兼容。

4

4 回答 4

1

首先,如果您使用的是 Spring Data 2.1.X,3.2.8 似乎很旧。我会坚持使用 spring-data-mongodb 所依赖的任何版本。即使这样,Fongo 也不兼容较新的 mongo 驱动程序。有几个与此相关的未解决问题:#316#337#357

上面的最后一个问题链接到可能对你有用的 Fongo的一个分支。或者您可以尝试将 mongo 驱动程序降级到 3.7 并使用 fongo 2.2.0-RC1,它也可以根据相同的问题工作。但是,我不确定这是否与您的 Spring Data 版本兼容。

于 2019-03-12T02:37:13.677 回答
1

我认为目前最好的解决方案是切换到 [mongo java server][1]。

这就是我使用最新版本进行测试的方式。

于 2019-02-04T14:42:49.020 回答
1

我有一个在 JDK 11 和 Spring 2.1 中运行的应用程序,并且还使用 Fongo 来模拟 Mongo 响应。

我的应用程序在以下软件包组合下运行良好

使用com.github.fakemongo:fongo 2.2.0-RC1(使用2.2.0-RC2时发现异常)

spring-boot-dependencies 2.1.x(因为 Spring Boot 2.1 带来了 Java 11 支持)

您需要覆盖 Spring 2.1 中的一些依赖项,如下所示

  • 春天数据共享 2.0.8
  • spring-boot-starter-data-jpa 2.0.8
  • 弹簧数据-jpa 2.0.8
  • spring-boot-starter-data-mongodb 2.0.8
  • 弹簧引导测试 2.0.8
  • 弹簧引导测试自动配置 2.0.8
  • spring-boot-starter-test 2.0.8
  • spring-data-mongodb 2.0.13.RELEASE(Spring 2.0.8 中的依赖项之一)
  • mongodb-驱动程序核心 3.6.4
  • mongo-java-driver 3.6.4
  • mongodb-驱动程序 3.6.4
  • org.mongodb:bson 3.6.4

更重要的是,在 pom.xml 中定义上述依赖项后,运行“clean dependency:tree”以查看您的应用程序或模块是否选择了正确的包。

[INFO] +- org.springframework.boot:spring-boot-starter-data-mongodb:jar:2.0.8.RELEASE:compile
[INFO] |  +- org.mongodb:mongodb-driver:jar:3.6.4:compile
[INFO] |  |  +- org.mongodb:bson:jar:3.6.4:compile
[INFO] |  |  \- org.mongodb:mongodb-driver-core:jar:3.6.4:compile
于 2019-03-05T06:59:09.330 回答
0

我有同样的问题,这是在 fongo 版本和 mongo 版本之间找到正确匹配的问题。由于出现此类错误很烦人,而且将来可能会对其他人有所帮助:

  1. 转到maven 存储库中的 fongo 页面
  2. 选择一个版本,例如 2.1.0
  3. 向下滚动,直到找到 mongo db 依赖项:

在此处输入图像描述

在此示例中,您可以看到 fongo 2.1.0 与 mongo 3.4.2 匹配。

于 2019-08-26T20:57:25.670 回答