spring整合mongodb集群
生活随笔
收集整理的這篇文章主要介紹了
spring整合mongodb集群
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】Linux 静态库与共享库的使用
- 下一篇: [安卓] 7、页面跳转和Intent简单