繁体   English   中英

MongoDB init 在引导程序中抛出 java.lang.NoClassDefFoundError: com/mongodb/client/internal/SimpleMongoClient

[英]MongoDB init throw in bootstrap java.lang.NoClassDefFoundError: com/mongodb/client/internal/SimpleMongoClient

我将 MongoDB 驱动程序迁移到 Mongo 5 版本。 在我的项目中,我们在这个库之前使用过

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>org.mongodb.morphia</groupId>
    <artifactId>morphia</artifactId>
    <version>1.3.2</version>
</dependency>

替换为这些库:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.4.0</version>
</dependency>
<dependency>
    <groupId>dev.morphia.morphia</groupId>
    <artifactId>core</artifactId>
    <version>1.6.1</version>
</dependency>

我们有 Java 8 版本,所以我们不能使用 Morphia 的 2.0 版本,因为它是从 Java 11 开始的。我们为 Mongo 客户端选项使用构建器,并在创建这些选项时在 SimpleMongoClient 上使用 NoClassDefFoundError。

蒙古支持:

public void init() {
        logger.info("MongoDaoSupport :: Start init mongodb connection");
        Builder builder = MongoClientOptions.builder()
            .connectionsPerHost(Integer.parseInt(connectionsPerHost));

        if (Boolean.parseBoolean(readSecondary)) {
            builder.readPreference(ReadPreference.secondaryPreferred());
        }

        List<ServerAddress> seeds = new ArrayList<>();
        if (uri.contains(",")) {
            for (String s : uri.split(",")) {
                seeds.add(new ServerAddress(s));
            }
        } else {
            seeds.add(new ServerAddress(uri));
        }

        MongoClient mongoClient = new MongoClient(seeds, MongoCredential.createCredential(username, connectDB, password.toCharArray()), builder.build());

        Morphia morphia = new Morphia();
        morphia.getMapper().getOptions().setMapSubPackages(true);
        morphia.mapPackage(entitiesPackage);

        datastore = morphia.createDatastore(mongoClient, dbName);
        logger.info("Mongodb connected.");
    }

日志 :

Caused by: java.lang.NoClassDefFoundError: com/mongodb/client/internal/SimpleMongoClient
    at omb.core.mongo.MongoDaoSupport.init(MongoDaoSupport.java:115)
    ... 39 more
Caused by: java.lang.ClassNotFoundException: com.mongodb.client.internal.SimpleMongoClient from [Module "deployment.my.ear.my-war.war" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:255)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    ... 40 more

Morphia 2.2.x 在 MongoDB 5.0 上运行得非常好。 您可以在https://morphia.dev找到详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM