簡體   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