`

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应用的启动和关闭释放

分享到:
评论

相关推荐

    java-mongodb底层封装

    本项目针对MongoDB进行了底层封装,旨在提供一套简洁、高效的API,使得开发人员可以更加便捷地进行数据的增删查改操作,无需直接与MongoDB的原生驱动打交道。以下是关于"java-mongodb底层封装"这一主题的详细知识点...

    基于springboot的语音健康数据管理系统平台.rar

    同时,它还支持各种数据库连接,包括关系型数据库MySQL、PostgreSQL等,以及非关系型数据库如MongoDB,方便存储和处理大量语音健康数据。 前端部分则采用了Vue.js,这是一个渐进式的JavaScript框架,以组件化开发为...

    后台开发核心技术面试集锦

    - 使用滑动窗口机制来控制发送方的发送速率,确保接收方不会被过多的数据淹没。 - **TCP拥塞控制** - 通过慢启动、拥塞避免、快重传和快恢复等算法来避免网络拥塞。 **1.6 网络编程** - **网络编程的一般步骤**...

    Node.js数据库操作之连接MySQL数据库(一)

    在完成数据库操作后,一定要记得调用`end()`方法关闭连接,以释放系统资源并避免因连接过多导致的问题。 除了显式连接,`mysql`库还提供了两种其他方式建立连接: 1. **隐式建立连接**:直接调用`query()`方法,...

    基于Python网络爬虫毕业论文.doc

    - **数据库存储**:将清洗后的数据保存到MongoDB等数据库中,便于后续处理和查询。 7. **数据可视化展示**: - **图表生成**:使用matplotlib、seaborn等库生成直观的图表。 - **交互式展示**:利用Dash、Flask...

    java网络蜘蛛示例程序

    Java提供了多种数据存储选项,如文件系统、数据库(JDBC)、或者NoSQL数据库如MongoDB。 8. **算法与数据结构**:如队列(Queue)用于存储待抓取的URL,优先队列(PriorityQueue)用于根据某种策略(如深度优先或...

    C#winform用户设置模块通信录模块

    3. **数据库集成**: 可能会用到ADO.NET库连接SQL Server或SQLite等关系型数据库,或者使用NoSQL数据库如MongoDB。 4. **搜索和过滤**: 实现快速查找和筛选联系人功能,可能需要使用索引、模糊查询技术。 5. **分页...

    2021-2022计算机二级等级考试试题及答案No.3750.docx

    根据给定文件的信息,我们可以总结出以下几个重要的IT知识点: ### 1. TCP协议的特点 TCP(传输控制协议)是一种面向连接的协议,这意味着在数据传输之前,必须在客户端与服务器之间建立逻辑连接。这种连接确保了...

    网络机器人Java编程指南

    - **数据库**:如MySQL、MongoDB等,适合存储大量数据,Java有JDBC接口进行数据库操作。 - **NoSQL数据库**:如Redis、Cassandra,对于高速写入和读取有优势。 6. **异常处理与日志记录** - **Java异常处理**:`...

    Java编写的用于批量管理Linux服务器的简易系统源代码.zip

    8. **数据持久化**:系统可能使用数据库如MySQL或MongoDB来存储服务器信息、用户信息和历史任务记录,确保数据安全。 设计上,该系统可能采用模块化和分层架构,如MVC(Model-View-Controller)模式,将业务逻辑、...

    网络蜘蛛spider crawl

    网络蜘蛛,也称为Web爬虫或网页抓取器,是一种自动遍历互联网并抓取网页内容的程序。在Java编程语言中实现网络蜘蛛,能够帮助我们有效地获取和分析大量网页数据,这对于搜索引擎优化、市场研究、数据分析等领域都...

    GitChatLesson-SpringBootStudy:CSDN GitChat达人课《跟武哥一起学Spring Boot》

    - `spring-boot-starter-data-mongodb`:连接MongoDB数据库。 - `spring-boot-starter-data-rest`:提供RESTful API的支持。 3. **项目结构解析**: - `src/main/java`:包含主程序类和各个服务、控制器等Java...

    danksongs

    如 `net/http` 包用于处理 HTTP 请求,`net` 包用于网络连接,`io` 和 `io/ioutil` 用于输入输出操作,这些在构建 Web 应用时都会用到。 3. **依赖管理**:Go 通过 `go mod` 提供了模块化支持,帮助开发者管理和...

    洋葱游戏后端

    丰富的生态系统提供了大量现成的库和框架,如Express.js用于构建Web应用,MongoDB或PostgreSQL用于数据库操作, Passport.js进行用户认证等。 然而,这种架构也面临挑战,比如性能问题,因为JavaScript是单线程的,...

    yeb

    6. **数据库集成**:YEB与多种数据库(如MySQL、Oracle、MongoDB等)兼容,支持JPA和MyBatis等持久层框架,方便进行数据操作。 7. **安全控制**:框架内建了安全机制,包括身份验证和授权,例如Spring Security的...

Global site tag (gtag.js) - Google Analytics