当前位置: 首页 > 知识库问答 >
问题:

使用mongoDB和java时连接错误太多

吴哲
2023-03-14

我使用MongoDbFactory用Java连接到mongodb。但mongo服务每小时至少抛出一次套接字异常。因此,我不得不重启mongodb服务来恢复操作。我认为这可能是因为从java到mongodb的连接未关闭,而且MongoDbFactory没有为我提供关闭连接的功能。如何确保在特定会话后关闭所有连接。

这是我正在使用的代码:

package com.####.mongo.configuration;

import com.mongodb.Mongo;
import org.springframework.context.annotation.Bean;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;

@Configuration
public class SpringMongoFeedConfig {

public @Bean
MongoDbFactory mongoDbFactory() throws Exception {
    return new SimpleMongoDbFactory(new Mongo(), "feedDatabase");
}

public @Bean
MongoTemplate mongoTemplate() throws Exception {

    MappingMongoConverter converter = new MappingMongoConverter(mongoDbFactory(), new MongoMappingContext());
    converter.setTypeMapper(new DefaultMongoTypeMapper(null));
    MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory(), converter);


    return mongoTemplate; 
} 

}

和:

private String insertFeedsToMongo(FeedMongoDTO feedObject, FeedType type) throws UnknownHostException {
    try {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoFeedConfig.class);
        MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");

        switch (type) {

        case FOLLOW:
            mongoOperation.save(feedObject, "feedsByUid");
            break;

        case GENERAL:
            mongoOperation.save(feedObject, "allFeeds");
            break;

        default:
            break;
        }

        return feedObject.getId();

    } catch (Exception ex) {
        log.info("insertFeedsToMongo() : mongo Exception - ", ex);
        return null;
    }
}

共有2个答案

孟俊发
2023-03-14

根据阿卡迪奥的建议,我做了如下工作

public class FeedMongoOperations {

public static transient Log log = LogFactory.getLog(FeedMongoOperations.class);

private Mongo mongo;
private SimpleMongoDbFactory dbFactory;
private MongoTemplate mongoTemplate;

public boolean openDbConnection() {
    try {
        MongoOptions options = new MongoOptions();
        options.connectionsPerHost = 100;
        mongo = new Mongo("localhost", options);
        dbFactory = new SimpleMongoDbFactory(mongo, "feedDatabase");
        MappingMongoConverter converter = new MappingMongoConverter(dbFactory, new MongoMappingContext());
        converter.setTypeMapper(new DefaultMongoTypeMapper(null));
        mongoTemplate = new MongoTemplate(dbFactory, converter);

        return true;
    } catch (Exception e) {
        return false;
    }
}

public boolean closeDbConnection() {
    try {
        mongoTemplate = null;
        dbFactory = null;
        mongo.close();

        return true;
    }
}

public String save(FeedMongoDTO feed, String collectionName) {
    try {
        mongoTemplate.save(feed, collectionName);
        return feed.getId();
    } catch (Exception ex) {
        return null;
    } 
}

public FeedMongoDTO getFeed(String mongoId, String collectionName) {

    try {
        FeedMongoDTO feedMongoDTO = mongoTemplate.findOne(new Query(Criteria.where("id").is(mongoId)), FeedMongoDTO.class,
                collectionName);
        return feedMongoDTO;
    } catch (Exception ex) {
        return null;
    }
}

}
糜博远
2023-03-14

我也遇到了Mongo对象的问题。一定要打电话给myMongo。close()当特定连接完成时,会将其解析。

我建议将使用new Mongo()创建的实例存储在factory函数中的某个位置,以便以后关闭它(SimpleMongoDbFactoryMongo实例。

 类似资料:
  • 我正在使用mongodb和.NET Core2.2 web API。当我在本地计算机上运行时,我收到以下错误

  • 我正在windows 10上安装mongoDb 4.0,并遵循了安装指南。mongodb服务器正在作为服务运行。当我打开命令提示符并键入:mongod时,我收到以下消息: 2018-07-13T13:47:41.173 0200I NETWORK[initand听]在端口27017上等待连接 当我键入mongo时,会出现以下错误: MongoDB shell version v4.0.0连接到:m

  • 我目前正在通过以下教程学习如何通过mongodb API使用Azure的cosmosdb:https://docs.microsoft.com/en-us/azure/cosmos-db/tutorial-develop-mongoDB-react 本教程的最终repo在这里:https://github.com/azure-samples/react-cosmosdb,但到目前为止,我只是在第5

  • 我尝试通过应用服务器Glassfish和JPA连接到mysql数据库。 我的persistence.xml如下所示: 有什么问题?

  • 我是nodejs和MongoDB的重要成员。尝试连接到数据库时遇到以下错误: (节点:10124)UnhandledPromiseRejectionWarning:MongoNetworkError:在池上第一次连接[MongoNetworkError:connect Econnn拒绝127.0.0.1:27017]时无法连接到服务器[127.0.0.1:27017].(E:\node js wo

  • 我尝试通过应用服务器Glassfish和JPA连接到mysql数据库。 我的persistence.xml如下所示: mysql中的“max_connections”设置为600。这样就够了。 有什么问题?