2019独角兽企业重金招聘Python工程师标准>>>

先看一下Spring对MongoDB的配置文件mongo.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:mongo="http://www.springframework.org/schema/data/mongo"xsi:schemaLocation="http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/data/mongohttp://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><context:component-scan base-package="com.cher7.mongo" />
<!--replicaSetMongo 为配置多个mongos或配置多个relicasetmongo,但是所配置的必须为同一类型--><mongo:mongo id="replicaSetMongo" replica-set="${mongodb.host}"> <!-- 每个IP的连接数--><mongo:options connections-per-host="100"threads-allowed-to-block-for-connection-multiplier="50"auto-connect-retry="true"/></mongo:mongo><bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"><constructor-arg name="mongo" ref="replicaSetMongo" /><!--mongo的数据库名称--><constructor-arg name="databaseName" value="${mongodb.dataname}" /></bean><beans profile="test"><context:property-placeholder location="classpath:config/mongodb.properties"/></beans>
</beans>

mongodb.properties代码为:

#mongodb.host=192.168.65.4:10000,192.168.65.5:10000 #此处均为mongos
mongodb.dataname=cher7

很多同学用Spring封装的MongoDB包时都会对多个MongoDB的负载均衡疑惑,Spring到底是如何做负载均衡呢?由于本文中心不是解析此问题,只做稍微解释:Spring启动了多个线程,每个线程的工作为ping一下要连接的Mongo库,取连接时间最短的Mongo为客户端提供服务。有兴趣的同学可以自己查看一下源码,此处不再详述。

继续上述。mongo.xml文件中对外提供了mongoTemplate对象,该对象即可对Mongo库进行增删改查各项操作。

本人对此作了小小封装:

package com.cher7.mongo;import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Order;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;import com.cher7.util.Reflections;/*** @ClassName: BaseMongoManager* @Description:* @author zc* @date 2014-5-8 下午3:50:22* */
public class BaseMongoManager<E> {/** 日志对象 */protected static final Logger logger = Logger.getLogger(BaseMongoManager.class);@Autowiredprivate MongoTemplate mongoTemplate;public void setMongoTemplate(MongoTemplate mongoTemplate) {this.mongoTemplate = mongoTemplate;}/*** Entity的类型*/protected Class<E> entityClass;public BaseMongoManager() {this.entityClass = Reflections.getSuperClassGenricType(getClass());}/*** * @Title: findAll* @Description: 查询表格所有的数据* @return List<E> 当前实体对应的表格的所有数据。*/public List<E> findAll() {return this.findAll(null);}/*** @Title: findAll* @Description: 查询表格所有的数据* @param clazz*            该表所对应的实体* @param collcetionName*            表格名称* @return List<E>*/public List<E> findAll(String collcetionName) {if (StringUtils.isBlank(collcetionName)) {collcetionName = mongoTemplate.getCollectionName(Reflections.getSuperClassGenricType(getClass()));if (StringUtils.isBlank(collcetionName)) {collcetionName = this.entityClass.getSimpleName().toLowerCase();}logger.info("findAll's param collcetionName is null,so it default is "+ collcetionName);}return mongoTemplate.findAll(entityClass, collcetionName);}/*** * @Title: findCount* @Description:查询当前实体对应表格的所有数据的条数* @return long 总条数* @throws*/public long findCount() {long count = 0;count = mongoTemplate.count(new Query(), entityClass);return count;}/**** * @Title: insert* @Description: 入库* @param e*            实体数据* @param collectionName*            表名*/public void insert(E e, String collectionName) {mongoTemplate.insert(e, collectionName);}/*** * @Title: insert* @Description: 入库* @param e*            实体数据*/public void insert(E e) {mongoTemplate.insert(e);}/*** 生产查询语句* * @Title: createCriteria* @Description: 根据不同条件生产SQL* @param gtMap* @param ltMap* @param eqMap* @param gteMap* @param lteMap* @param regexMap* @param inMap* @param neMap* @return Criteria 查询的语句* @throws*/@SuppressWarnings("rawtypes")public Criteria createCriteria(Map<String, Object> gtMap,Map<String, Object> ltMap, Map<String, Object> eqMap,Map<String, Object> gteMap, Map<String, Object> lteMap,Map<String, String> regexMap, Map<String, Collection> inMap,Map<String, Object> neMap) {Criteria c = new Criteria();List<Criteria> listC= new ArrayList<Criteria>();Set<String> _set = null;if (gtMap != null && gtMap.size() > 0) {_set = gtMap.keySet();for (String _s : _set) {listC.add( Criteria.where(_s).gt(gtMap.get(_s)));}}if (ltMap != null && ltMap.size() > 0) {_set = ltMap.keySet();for (String _s : _set) {listC.add(  Criteria.where(_s).lt(ltMap.get(_s)));}}if (eqMap != null && eqMap.size() > 0) {_set = eqMap.keySet();for (String _s : _set) {listC.add(  Criteria.where(_s).is(eqMap.get(_s)));}}if (gteMap != null && gteMap.size() > 0) {_set = gteMap.keySet();for (String _s : _set) {listC.add( Criteria.where(_s).gte(gteMap.get(_s)));}}if (lteMap != null && lteMap.size() > 0) {_set = lteMap.keySet();for (String _s : _set) {listC.add(  Criteria.where(_s).lte(lteMap.get(_s)));}}if (regexMap != null && regexMap.size() > 0) {_set = regexMap.keySet();for (String _s : _set) {listC.add(  Criteria.where(_s).regex(regexMap.get(_s)));}}if (inMap != null && inMap.size() > 0) {_set = inMap.keySet();for (String _s : _set) {listC.add(  Criteria.where(_s).in(inMap.get(_s)));}}if (neMap != null && neMap.size() > 0) {_set = neMap.keySet();for (String _s : _set) {listC.add( Criteria.where(_s).ne(neMap.get(_s)));}}if(listC.size() > 0){Criteria [] cs = new Criteria[listC.size()];c.andOperator(listC.toArray(cs));}return c;}public Criteria createCriteria(Map<String, Object> eqMap) {return this.createCriteria(null, null, eqMap, null, null, null, null,null);}public Criteria createCriteria(Map<String, Object> eqMap,Map<String, Object> neMap) {return this.createCriteria(null, null, eqMap, null, null, null, null,neMap);}/*** * @Title: findCount* @Description: 根据各种条件查询总数* @param gtMap* @param ltMap* @param eqMap* @param gteMap* @param lteMap* @param regexMap* @param inMap* @param neMap* @return long 总数* @throws*/@SuppressWarnings("rawtypes")public long findCount(Map<String, Object> gtMap, Map<String, Object> ltMap,Map<String, Object> eqMap, Map<String, Object> gteMap,Map<String, Object> lteMap, Map<String, String> regexMap,Map<String, Collection> inMap, Map<String, Object> neMap) {long count = 0;Criteria c = this.createCriteria(gtMap, ltMap, eqMap, gteMap, lteMap,regexMap, inMap, neMap);Query query = null;if (c == null) {query = new Query();} else {query = new Query(c);}count = mongoTemplate.count(query, entityClass);return count;}/**** * @Title: findCount* @Description: 根据创建的条件查询总数* @param  queryC* @return long    返回类型* @throws*/public long findCount(Criteria queryC){Query query = new Query(queryC);return mongoTemplate.count(query, entityClass);}/*** * @Title: findCount* @Description: 根据多个种条件 or 的方式查询* @param orList*            or的查询条件的集合* @return long* @throws*/public long findCount(Criteria... orList) {long count = 0;Criteria c = new Criteria();Query query = null;if (orList != null && orList.length > 0) {c.orOperator(orList);}query = new Query(c);count = mongoTemplate.count(query, entityClass);return count;}@SuppressWarnings("rawtypes")public long findCount(Map<String, Object> gtMap, Map<String, Object> ltMap,Map<String, Object> eqMap, Map<String, String> regexMap,Map<String, Collection> inMap) {return this.findCount(gtMap, ltMap, eqMap, null, null, regexMap, inMap,null);}public long findCountByContainRegex(Map<String, Object> gtMap,Map<String, Object> ltMap, Map<String, Object> eqMap,Map<String, String> regexMap) {return this.findCount(gtMap, ltMap, eqMap, regexMap, null);}/*** * @Title: findListByPage* @Description: 根据分页+条件获取对应的实体集合* @param eqMap* @param gtMap* @param ltMap* @param gteMap* @param lteMap* @param regexMap* @param inMap* @param orders*            排序集合* @param pageIndex*            页码* @param pageSize*            每页条数* @return List<E> 实体集合* @throws*/@SuppressWarnings("rawtypes")public List<E> findListByPage(Map<String, Object> eqMap,Map<String, Object> gtMap, Map<String, Object> ltMap,Map<String, Object> gteMap, Map<String, Object> lteMap,Map<String, String> regexMap, Map<String, Collection> inMap,Map<String, Object> neMap, List<Order> orders, int pageIndex,int pageSize) {List<E> list = null;Criteria c = this.createCriteria(gtMap, ltMap, eqMap, gteMap, lteMap,regexMap, inMap, neMap);Sort sort = null;if (orders != null && orders.size() > 0) {sort = new Sort(orders);}Query query = null;if (c == null) {query = new Query();} else {query = new Query(c);}if (sort != null) {query = query.with(sort);}if (pageSize > 0) {query.skip((pageIndex - 1) * pageSize);query.limit(pageSize);}list = mongoTemplate.find(query, entityClass);return list;}/*** @Title: findOneObject* @Description: 符合条件的某一条数据* @param eqMap* @param gtMap* @param ltMap* @param gteMap* @param lteMap* @param regexMap* @param inMap* @return E 返回该数据对应的实体*/@SuppressWarnings("rawtypes")public E findObject(Map<String, Object> eqMap, Map<String, Object> gtMap,Map<String, Object> ltMap, Map<String, Object> gteMap,Map<String, Object> lteMap, Map<String, String> regexMap,Map<String, Collection> inMap) {E e = null;List<E> list = this.findList(eqMap, gtMap, ltMap, gteMap, lteMap,regexMap, inMap, null, null);if (list != null && list.size() > 0) {e = list.get(0);}return e;}/*** * @Title: findList* @Description: 多个查询条件or方式组合查询* @param orList* @return List<E>* @throws*/public List<E> findList(Criteria... orList) {return this.findListByPage(null, 0, 0, orList);}/*** * @Title: findListByOrder* @Description: 多个查询条件or方式组合查询* @param orList* @param orders* @return List<E>* @throws*/public List<E> findListByOrder(List<Order> orders, Criteria... orList) {return this.findListByPage(orders, 0, 0, orList);}/*** * @Title: findListByPage* @Description: 根据查询条件直接查询* @param  c* @param  orders* @param  pageIndex* @param  pageSize* @return List<E>    * @throws*/public List<E> findListByPage(Criteria c, List<Order> orders, int pageIndex,int pageSize){Query query = new Query(c);Sort sort = null;if (orders != null && orders.size() > 0) {sort = new Sort(orders);}if (sort != null) {query = query.with(sort);}if (pageSize > 0) {query.skip((pageIndex - 1) * pageSize);query.limit(pageSize);}return mongoTemplate.find(query, entityClass);}public List<E> findListByOrder(Criteria c, List<Order> orders){return this.findListByPage(c, orders, 0, 0);}public List<E> findList(Criteria c){return this.findListByPage(c, null, 0, 0);}/*** * @Title: findObject* @Description: 根据查询条件查询某一个object* @param  c* @return E    * @throws*/public E findObject(Criteria c){List<E> list = this.findList(c);if(list!=null && list.size()>0){return list.get(0);}return null;}/*** * @Title: findListByPage* @Description: 多个查询条件or方式组合查询* @param orList*            or的查询条件的集合* @param orders排序规则* @param pageIndex*            第几页* @param pageSize每页多少条* @return List<E> 符合条件的集合* @throws*/public List<E> findListByPage(List<Order> orders, int pageIndex,int pageSize, Criteria... orList) {List<E> list = null;Criteria c = new Criteria();Query query = null;if (orList != null && orList.length > 0) {c.orOperator(orList);}query = new Query(c);Sort sort = null;if (orders != null && orders.size() > 0) {sort = new Sort(orders);query = query.with(sort);}if (pageSize > 0) {query.skip((pageIndex - 1) * pageSize);query.limit(pageSize);}list = mongoTemplate.find(query, entityClass);return list;}@SuppressWarnings("rawtypes")public List<E> findListNotContainOrder(Map<String, Object> eqMap,Map<String, Object> gtMap, Map<String, Object> ltMap,Map<String, Object> gteMap, Map<String, Object> lteMap,Map<String, String> regexMap, Map<String, Collection> inMap,Map<String, Object> neMap) {return this.findList(eqMap, gtMap, ltMap, gteMap, lteMap, regexMap,inMap, neMap, null);}}

转载于:https://my.oschina.net/91jason/blog/368487

spring整合mongodb集群相关推荐

  1. Spring整合Quartz集群部署

    Spring整合Quartz集群部署 Quartz的分布式模式 数据表创建 quartz.properties spring-job.xml Quartz的分布式模式 集群中的每个节点都是一个独立的Q ...

  2. 超完整!Springboot整合redis集群(Sentine),spring boot自动配置集成redis集群(Sentine)

    1.添加maven依赖 注意maven版本依赖,版本要相互匹配,如不知道如何查看相对应的版本时,可进入博主主页查看博主上一篇博文. <parent><groupId>org.s ...

  3. [由零开始]Spring boot 整合redis集群

    Spring boot 整合redis集群 一.环境搭建 Redis集群环境搭建:https://blog.csdn.net/qq497811258/article/details/108124697 ...

  4. redis -Spring与Jedis集群 Sentinel

    2019独角兽企业重金招聘Python工程师标准>>> redis -Spring与Jedis集群 Sentinel 博客分类: 缓存 首先不得不服Spring这个宇宙无敌的开源框架 ...

  5. 共享单车项目、mongodb集群

    需求分析 摩拜单车的重点是物联网大数据 车投放在什么地方,要根据数据来进行支撑,根据历史数据(骑行记录) 通过共享单车的骑行数据可以分析出个性城市 成都休闲之都:骑行的地方多为娱乐场所 上海敬业之城: ...

  6. Springboot项目整合redis集群

    文章目录 1.redis集群搭建 详情见: https://blog.csdn.net/qq_45076180/article/details/103026150 2.springboot整合redi ...

  7. java集群解析文件_java相关:springboot整合redis集群过程解析

    java相关:springboot整合redis集群过程解析 发布于 2020-4-13| 复制链接 摘记: 简介 在springboot使用搭建好的redis集群添加redis和连接池依赖 ```x ...

  8. java 探花交友项目day5 推荐好友列表 MongoDB集群 发布动态,查询动态 圈子功能

    推荐好友列表 需求分析 推荐好友:分页形式查询推荐的用户列表,根据评分排序显示 代码实现: tanhuaController: /**  * 查询分页推荐好友列表  */ @GetMapping(&q ...

  9. Dobbo微服务项目实战(详细介绍+案例源码) - 5.推荐好友列表/MongoDB集群/动态发布与查看

    You are a wizard, Harry! 系列文章目录 1. 项目介绍及环境配置 2. 短信验证码登录 3. 用户信息 4. MongoDB 5.推荐好友列表/MongoDB集群/动态发布与查 ...

最新文章

  1. Curator Cache
  2. UI基础视图----UIImageView总结
  3. 【Python】机器学习绘图神器Matplotlib首秀!
  4. scss里父选择器的标识符
  5. python创建空txt文件_python创建txt文件
  6. 新发布 | Azure镜像市场正式上线
  7. 【转载】Sitemap在线生成器,网站地图在线生成工具
  8. laravel 方法摘要
  9. c语言的真随机,怎样让c语言中的随机函数真正随机?
  10. malformed utf-8 characters, possibly incorrectly encoded
  11. 建立项目接口文档_一个 SpringBoot 项目该包含哪些?
  12. ThreadPoolExecutor使用和思考-线程池大小设置与BlockingQueue的三种
  13. 一盘商家一盘货,拼多多为什么比手淘便宜?
  14. 现代大学英语精读第二版(第六册)学习笔记(原文及全文翻译)——3 - What Is News?(新闻是什么?)
  15. linux飞行模式问题解决
  16. Java获取实体类字段名
  17. 微分几何 Class 3 曲线,曲率与挠率
  18. mysql转储导入错误_将MySQL转储应用于RDS时出现“无法解析表名”错误
  19. iOS微信支付--解析失败
  20. 啃碎并发(一):Java线程总述与概念

热门文章

  1. cas 注销不关闭浏览器异常_如何关闭华为手机这些“流氓”推送?
  2. redis -cli command not found_记一次 Linux 服务器 redis 漏洞分析
  3. ckeditor 图片上传_关于上传中国鸟类图库和哺乳动物图库物种数量及称号的最新规定...
  4. java uncked_使用FindBugs对SpringSide1.0m3进行分析的结果
  5. ajax post传送数组以及java后台接收数组
  6. java 面试题三十二 mysql查询面试题
  7. 我是技术总监,你干嘛总问我技术细节?
  8. javaweb mooc在线系统案例实战-张晨光-专题视频课程
  9. 【mybatis-plus】什么是乐观锁?如何实现“乐观锁”
  10. 红队中易被攻击的一些重点系统漏洞整理