首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Web项目操作Mongodb数据连接过多错误总结

2013-10-14 
Web项目操作Mongodb数据连接过多异常总结项目中使用Mongodb存储图片及文件,在后台操作中没操作一个就实例

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"
??? ??? ??? name="code">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应用的启动和关闭释放

热点排行