hosts 不能为 null - 创建与 MongoDB 4.2 数据库的 POJO 连接时出现异常

hosts can not be null - exception when creating POJO connection to MongoDB 4.2 database

在 Mongo 3.6 中,以下代码使用自动 POJO 映射连接到数据库:

    CodecRegistry pojoCodecRegistry = fromRegistries(MongoClient.getDefaultCodecRegistry(),
                                      fromProviders(PojoCodecProvider.builder().automatic(true).build()));
    mongoClient = new MongoClient("localhost",
                                  MongoClientOptions.builder().codecRegistry(pojoCodecRegistry).build());

在 Mongo 4.2 中,classes 略有变化。重要的是,新 MongoClients class 的 create() 方法不支持旧构造函数支持的 "localhost" String 参数。这意味着文档 (https://mongodb.github.io/mongo-java-driver/4.0/driver/getting-started/quick-start-pojo/) 的快速入门 - POJO 部分中提供的示例不起作用。

33        CodecRegistry pojoCodecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),
34                                          fromProviders(PojoCodecProvider.builder().automatic(true).build()));
35       
36        MongoClientSettings settings = MongoClientSettings.builder()
37                                            .codecRegistry(pojoCodecRegistry)
38                                            .build();
39        
40        mongoClient = MongoClients.create(settings);

我在 Tomcat 9 上 运行 并收到以下异常:

java.lang.IllegalArgumentException: hosts can not be null
    com.mongodb.assertions.Assertions.notNull(Assertions.java:37)
    com.mongodb.connection.ClusterSettings.<init>(ClusterSettings.java:446)
    com.mongodb.connection.ClusterSettings.<init>(ClusterSettings.java:43)
    com.mongodb.connection.ClusterSettings$Builder.build(ClusterSettings.java:260)
    com.mongodb.MongoClientSettings.<init>(MongoClientSettings.java:733)
    com.mongodb.MongoClientSettings.<init>(MongoClientSettings.java:59)
    com.mongodb.MongoClientSettings$Builder.build(MongoClientSettings.java:481)
    com.ossltd.whm.MongoDB.<init>(MongoDB.java:38)
    ...

这是与 Tomcat 在同一服务器上的 MongoDB 运行 的单个实例。如何为此连接设置主机值?或者我应该做些什么来获得与第一个示例相同类型的连接?

问题是由 war 文件中包含的冲突 jar 引起的。

我只是在尝试将我的 pom.xml 与一个较旧的工作项目进行比较时偶然发现的。我误以为我在这个新项目中使用的是 3.6.0 jar 文件,但是 Eclipse 中的 Maven 依赖项和使用 mvn dependency:tree 只显示 4.0.4 jar 文件。

当我检查 war 文件的实际内容时(在我安装的 webapp 的 /WEB-INF/lib 目录中),我发现它包含 Mongo 3.6.0 jar 、4.0.4 遗留 jar 和 4.0.4 同步 jar 文件。尽管我之前尝试过,但我无法在我当前的项目中找到任何可以将它们包含在内的引用。

解决方案是简单地确保我的构建目标在 tomcat7:redeploy.

之前包含 clean

似乎正在更新 war 文件,而不是按照 tomcat7:redeploy 目标重新创建。