我试图将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]
有什么办法可以解决? 我找到一个链接,说这2个不兼容。
答案 0 :(得分:1)
我认为目前最好的解决方案是切换到[mongo java服务器] [1]。
这就是我如何使测试与最新版本一起使用的原因。
答案 1 :(得分: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中的某些依赖项,如下所示
更重要的是,在pom.xml中定义了以上依赖项之后 运行“ cleandependency:tree”以查看您的应用程序OR模块是否选择了正确的软件包。
[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
答案 2 :(得分:0)
我遇到了同样的问题,这是在fongo版本和mongo版本之间找到正确的匹配。由于出现此类错误很烦人,而且还因为它将来可能会帮助其他人:
在此示例中,您可以看到fongo 2.1.0与mongo 3.4.2匹配。