You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:55:35