Web项目操作Mongodb数据连接过多异常总结

项目中使用Mongodb存储图片及文件,在后台操作中没操作一个就实例化一个Mongo对象及连接池,也没有手动关闭,到时随着访问增加连接数不断增加(通过db.serverStatus().connections查看),最后导致mongodb拒绝web服务连接,web服务器抛出异常,经过改造后讲Mongodb的初始化通过spring实例化管理并设置成单例,代码中只要得到使用基本,不用重复实例化,随着服务器关闭,mongo对象及连接池关闭,连接数正常。

 

根据需要将mongo的相关增删改查 创建都封装到了MongoManager和DataProcessDao中,并打包加入到项目中

 

创建类MongoUtil

 

 

public class MongoUtil {
	private static MongoManager mongoManager;
	
	public MongoUtil() {
		if (mongoManager == null) {
			mongoManager = new MongoManager();
			mongoManager.getInstance();
			System.out.println("初始化 Mongo");
		}
	}
	
	public DataProcessDao getDataProcessDao() {
		DataProcessDao dataProcessDao = new DataProcessDao();
		dataProcessDao.setDb(mongoManager.getDB());
		return dataProcessDao;
	}
}

 时间仓促,没有自己整理

 

 

然后通过spring管理MongoUtil 保证单例存在appliactionContext中 达到mongo只创建一次,并在web应用服务停止时关闭

 

<bean id="MongoUtil"
            class="tsap.general.util.MongoUtil">
          </bean>

 

然后在需要的业务逻辑类中将MongoUtil注入进去,使用即可

public class OperateServiceImpl implements IOperateService {
	private static MongoUtil mongoUtil;
	private static DataProcessDao dataProcessDao;

        public MongoUtil getMongoUtil() {
		return mongoUtil;
	}

	public void setMongoUtil(MongoUtil mongoUtil) {
		this.mongoUtil = mongoUtil;
	}

        //业务逻辑代码
        public Message deleteById(String id) {
                //得到的dataProcessDao是已经通过配置文件读取参数、创建mongo实例及得到db的操作类
                dataProcessDao = mongoUtil.getDataProcessDao();
                //调用相关操作方法即可
	        dataProcessDao.removeByFileName(id);
}

 通过配置文件将MongoUtil注入到业务逻辑类中即可

 

<bean  id="OperateServiceImpl"  class="tsap.fxgl.service.impl.OperateServiceImpl"  >
          <property name="mongoUtil">
            <ref bean="MongoUtil"/>
        </property>
       </bean>

 

此时web服务只占几个连接数,切随着web应用的启动和关闭释放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值