微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我使用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;
    }
}

解决方法:

我也遇到了Mongo对象的问题.确保在完成特定连接时调用myMongo.close()解决它.

我建议将你的工厂函数中使用新Mongo()创建的实例存储在某个允许以后关闭的地方(SimpleMongoDbFactory可能就是那个地方).刚才注意到这是一个春天的事情.建议仍然存在:跟踪您的Mongo实例.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐