[英]MongoDB java error java.lang.NoClassDefFoundError: com/mongodb/MongoClient
[英]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.