Ubuntu环境下Spring+MongoDB连接失败问题求助
Spring+MongoDB 连接错误排查求助
在Ubuntu 22.04.2 LTS系统上开发Spring+MongoDB项目,参照《Spring Data MongoDB》教程操作后出现连接错误,数据无法保存也无法读取,怀疑是新版本MongoDB导致版本冲突。以下是配置文件及报错信息,请求协助解决:
1. SpringMongoConfig1.java 配置
@Configuration public class SpringMongoConfig1 { public @Bean MongoDbFactory mongoDbFactory() throws Exception { return new SimpleMongoDbFactory(new MongoClient(), "mongotmplt"); } public @Bean MongoTemplate mongoTemplate() throws Exception { MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory()); return mongoTemplate; } }
2. SpringConfig.xml 配置
<mongo:mongo host="127.0.0.1" port="27017" /> <mongo:db-factory dbname="mongotmplt" /> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> </bean>
报错信息
Exception in thread "main" org.springframework.dao.DataAccessResourceFailureException: Read operation to server /127.0.0.1:27017 failed on database mongotmplt; nested exception is com.mongodb.MongoException$Network: Read operation to server /127.0.0.1:27017 failed on database mongotmplt at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:56) at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1665) at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1495) at org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1302) at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:475) at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:470) at com.example.mongo2.Mongo2Application.main(Mongo2Application.java:37) Caused by: com.mongodb.MongoException$Network: Read operation to server /127.0.0.1:27017 failed on database mongotmplt at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:253) at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216) at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288) at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:273) at com.mongodb.DBCollection.findOne(DBCollection.java:728) at com.mongodb.DBCollection.findOne(DBCollection.java:670) at org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:1720) at org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:1705) at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1491)
问题分析与解决建议
1. 版本兼容性修复(核心问题)
你使用的MongoClient、SimpleMongoDbFactory属于旧版MongoDB驱动API,而新版MongoDB(4.0+)默认启用SCRAM-SHA-256认证,且驱动API已大幅更新,旧版Spring Data MongoDB无法兼容。
- 升级依赖版本:确保Spring Data MongoDB版本与MongoDB服务版本匹配(比如Spring Data MongoDB 3.x+对应MongoDB 4.0+)
- 替换旧API:改用新版驱动API配置客户端,示例:
@Configuration public class SpringMongoConfig1 { @Bean public MongoClient mongoClient() { MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("mongodb://127.0.0.1:27017/mongotmplt")) .build(); return MongoClients.create(settings); } @Bean public MongoTemplate mongoTemplate() { return new MongoTemplate(mongoClient(), "mongotmplt"); } }
2. 检查MongoDB服务状态
- 执行
sudo systemctl status mongod确认服务是否运行,未启动则执行sudo systemctl start mongod - 检查27017端口是否开放:
sudo ufw status,未开放则执行sudo ufw allow 27017
3. 认证权限配置
新版MongoDB默认启用认证,若数据库设置了账号密码,需在配置中添加认证信息:
- Java配置示例:
MongoCredential credential = MongoCredential.createCredential("你的用户名", "mongotmplt", "你的密码".toCharArray()); MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("mongodb://127.0.0.1:27017/mongotmplt")) .credential(credential) .build();
- XML配置示例:
<mongo:client uri="mongodb://用户名:密码@127.0.0.1:27017/mongotmplt" /> <mongo:db-factory dbname="mongotmplt" mongo-client-ref="mongoClient" />
4. 查看MongoDB日志
查看日志文件/var/log/mongodb/mongod.log,搜索连接失败的具体原因(如认证失败、协议不兼容等),定位更精准的问题。
内容的提问来源于stack exchange,提问作者Masoom Raza
相关产品推荐
相关产品推荐

