前一篇文章中介紹了在window系統(tǒng)下部署mongodb集群,按照教程一步步實(shí)現(xiàn)的話應(yīng)該都可以在本機(jī)部署成功了,上篇文章末尾也提到了,想集成到SSM框架中去,網(wǎng)上資料基本都是單個(gè)mongodb數(shù)據(jù)庫(kù)的,集群的例子很少,有幾個(gè)也殘缺不全,抽時(shí)間研究了一下,最終在SSM框架中成功集成,在文章末尾我會(huì)把spring中集成的源代碼發(fā)一下,SSM框架中集成基本類似,其實(shí)主要就是jar包問(wèn)題,單個(gè)mongodb集成實(shí)例,這篇文章寫得很詳細(xì),我也是根據(jù)這篇文章改編的。
單個(gè)數(shù)據(jù)庫(kù)連接:<mongo:mongo host="192.168.1.141" port="27017"/>
集群連接:
[java] view plain
copy <context:property-placeholder?location="classpath*:mongodb.properties"?/>????????????<mongo:mongo?id="mongo"?replica-set="${mongo.config.replica.set.address}">?????????????<mongo:options?connections-per-host="100"??????threads-allowed-to-block-for-connection-multiplier="50"??????auto-connect-retry="true"/>?????????????</mongo:mongo>???
集群與單個(gè)連接相比只是加了個(gè)replice-set屬性,但是因?yàn)閖ar包的問(wèn)題可能導(dǎo)致不支持,
修改這個(gè)jar包后會(huì)發(fā)現(xiàn)各種jar包報(bào)錯(cuò),一個(gè)一個(gè)改下來(lái),最后如下:
特別要注意的是:jar包不同配置文件中的寫法是不一樣的,同時(shí),在代碼中的增刪改查的方法參數(shù)的順序也是不一樣的,特別蛋疼。。。。
下面上集群的目錄樹結(jié)構(gòu):
首先是MongoTest類,程序入口:
[java] view plain
copy package?com.mongo.test;????import?java.util.List;??import?org.apache.commons.logging.Log;??import?org.apache.commons.logging.LogFactory;??import?org.springframework.context.ApplicationContext;??import?org.springframework.context.support.ClassPathXmlApplicationContext;??import?com.mongo.bean.Person;??import?com.mongo.dao.AbstractRepository;??import?com.mongo.dao.impl.PersonRepository;??????????public?class?MongoTest?{????????private?static?Log?log?=?LogFactory.getLog(MongoTest.class.getName());????????????private??AbstractRepository?pr=null;??????????????????public?void?init(){???????????log.debug("開始啟動(dòng)");???????????ApplicationContext?ctx?=?new?ClassPathXmlApplicationContext("applicationContext.xml");????????????pr=?(PersonRepository)ctx.getBean("personRepository");??????}????????????public?void?insert(){??????????for(int?i=0;i<5;i++){??????????????Person?p=new?Person("name"+i,i);???????????????pr.insert(p);???????????????log.debug("添加成功");??????????}????????????????}????????????public?void?deleteOne(){??????????String?id="57edd4506ab8e4b1f9e99e02";??????????pr.removeOne(id);??????????Person?p=?pr.findOne(id);??????????log.debug(p);??????}????????????public?void?removeAll(){??????????pr.removeAll();??????}????????????public?void?findOne(){??????????String?id="57edd4506ab8e4b1f9e99e01";??????????Person?p=?pr.findOne(id);??????????log.debug(p);??????}????????????public?void?listAll(){??????????List<Person>?list=pr.findAll();??????????log.debug("查詢結(jié)果如下:");??????????for?(Person?p:list){??????????????log.debug(p.toString());??????????}??????}????????????public?void?findAndModify(){??????????String?id="57f9f163d12818b23aa3dbf9";??????????Person?p=?pr.findOne(id);??????????p.setName("upda");??????????pr.insert(p);??????}??????????????????public?void?start(){??????????init();??????????????????listAll();????????}??????????????????public?static?void?main(String[]?args)?{??????????MongoTest?t=new?MongoTest();??????????t.start();??????}????}??
在mongodb環(huán)境搭建好之后,程序運(yùn)行首先運(yùn)行insert()方法,,插入幾條數(shù)據(jù),然后用可視化工具連上mongodb庫(kù)看下是否數(shù)據(jù)已經(jīng)插入,在執(zhí)行l(wèi)istAll(),查詢所有方法,看下控制臺(tái)是否有數(shù)據(jù)輸出,如果能正常輸出,就說(shuō)明你這個(gè)集成成功了一半了,關(guān)閉一個(gè)庫(kù)試試,數(shù)據(jù)如果還有的話,那肯定是已經(jīng)集成成功了。繼續(xù)上代碼:
AbstractRepository.java
[java] view plain
copy package?com.mongo.dao;????import?java.util.List;??import?com.mongo.bean.Person;????public?interface?AbstractRepository?{????????????????????public?void?insert(Person?person);?????????????????????public?Person?findOne(String?id);?????????????????public?List<Person>?findAll();???????????????public?List<Person>?findByRegex(String?regex);??????????????public?void?removeOne(String?name);?????????????????public?void?removeAll();?????????????????public?void?findAndModify(String?id);??????????????????}??
PersonRepository.java
[java] view plain
copy package?com.mongo.dao.impl;????import?java.util.List;??import?java.util.regex.Pattern;??import?org.springframework.data.mongodb.core.MongoTemplate;??import?org.springframework.data.mongodb.core.query.Criteria;??import?org.springframework.data.mongodb.core.query.Query;??import?org.springframework.data.mongodb.core.query.Update;??import?com.mongo.bean.Person;??import?com.mongo.dao.AbstractRepository;????public?class?PersonRepository?implements?AbstractRepository?{????????protected?MongoTemplate?mongoTemplate;??????????public?List<Person>?findAll()?{??????????return?getMongoTemplate().find(new?Query(),?Person.class,"personTest");???????????}??????????????????public?void?findAndModify(String?id)?{??????????Query?myQuery=new?Query(Criteria.where("id").is(id));??????????System.out.println(myQuery.toString());??????????getMongoTemplate().updateFirst(myQuery,?Update.update("age",?34),"personTest");????????????????}????????public?List<Person>?findByRegex(String?regex)?{???????????Pattern?pattern?=?Pattern.compile(regex,Pattern.CASE_INSENSITIVE);???????????????Criteria?criteria?=?new?Criteria("name").regex(pattern.toString());?????????????????return?getMongoTemplate().find(new?Query(criteria),?Person.class,"personTest");???????????}????????public?Person?findOne(String?id)?{???????????return?getMongoTemplate().findOne(new?Query(Criteria.where("id").is(id)),?Person.class,"personTest");???????????}????????public?void?insert(Person?person)?{??????????getMongoTemplate().save(?person,"personTest");??????}????????public?void?removeAll()?{??????????List<Person>?list?=?this.findAll();?????????????if(list?!=?null){?????????????????for(Person?person?:?list){?????????????????????getMongoTemplate().remove(person);??????????????}?????????????}???????????}????????public?void?removeOne(String?id)?{??????????Criteria?criteria?=?Criteria.where("id").in(id);?????????????if(criteria?!=?null){??????????????????Query?query?=?new?Query(criteria);??????????????????if(query?!=?null){???????????????getMongoTemplate().remove(?query,?Person.class,"personTest");???????????????}??????????}???????????}????????public?MongoTemplate?getMongoTemplate()?{??????????return?mongoTemplate;??????}????????public?void?setMongoTemplate(MongoTemplate?mongoTemplate)?{??????????this.mongoTemplate?=?mongoTemplate;??????}??????????}??
Person.java
[java] view plain
copy package?com.mongo.bean;????import?java.io.Serializable;????public?class?Person?implements?Serializable?{??????????????private?static?final?long?serialVersionUID?=?3617931430808763429L;????????????private?String?id;?????????private?String?name;?????????private?int?age;??????public?Person()?{??????????super();??????}??????public?Person(String?id,?String?name,?int?age)?{??????????super();??????????this.id?=?id;??????????this.name?=?name;??????????this.age?=?age;??????}??????????????public?String?getId()?{??????????return?id;??????}??????????????public?void?setId(String?id)?{??????????this.id?=?id;??????}??????????????public?String?getName()?{??????????return?name;??????}??????????????public?void?setName(String?name)?{??????????this.name?=?name;??????}??????????????public?int?getAge()?{??????????return?age;??????}??????????????public?void?setAge(int?age)?{??????????this.age?=?age;??????}????????????????public?Person(String?name,?int?age)?{??????????super();??????????this.name?=?name;??????????this.age?=?age;??????}????????????public?String?toString()?{?????????????????return?"Person[id="+id+",name="+name+",age="+age+"]";?????????????}?????????}??
applicationContext.xml
[java] view plain
copy <?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:????????????http:????????????http:????????????http:????????????http:????????????http:??????????????????<context:property-placeholder?location="classpath*:mongodb.properties"?/>????????????<mongo:mongo?id="mongo"?replica-set="${mongo.config.replica.set.address}">?????????????<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?ref="mongo"/>?????????????<constructor-arg?name="databaseName"?value="dbTest"/>???????????</bean>????????????????<bean?id="personRepository"?class="com.mongo.dao.impl.PersonRepository">?????????????<property?name="mongoTemplate"?ref="mongoTemplate"></property>?????????</bean>????????????????<context:annotation-config?/>????????????</beans>?????????
mongodb.properties
[java] view plain
copy mongo.config.replica.set.address=192.168.1.141:27017,192.168.1.141:27018??mongo.config.replica.set.name=testrs??mongo.config.database=dbTest??
testrs是上一篇中集群給每個(gè)服務(wù)器添加的自定義標(biāo)示,有的配置文件中會(huì)用到,我這里沒用到
dbTest是我的數(shù)據(jù)庫(kù)名,也是沒用到,我這個(gè)配置文件只是一個(gè)簡(jiǎn)化版的,很多參數(shù)都省略了, 實(shí)際上只需要一個(gè)地址就行,單機(jī)和集群配置文件的區(qū)別就是這個(gè)
用到的所有jar包,在http://mvnrepository.com都可以下載到:
commons-beanutils-1.8.3.jar
commons-codec-1.3.jar
commons-collections-3.2.1.jar
commons-io-1.3.2.jar
commons-lang-2.5.jar
commons-logging.jar
commons-pool-1.4.jar
log4j-1.2.14.jar
mongo-java-driver-2.14.3.jar
slf4j-api-1.5.6.jar
slf4j-log4j12-1.5.6.jar
spring-aop-4.3.3.RELEASE.jar
spring-asm-3.2.0.M1.jar
spring-aspects-4.3.3.RELEASE.jar
spring-beans-4.3.3.RELEASE.jar
spring-context-4.3.3.RELEASE.jar
spring-context-support-4.3.3.RELEASE.jar
spring-core-4.3.3.RELEASE.jar
spring-data-commons-1.12.4.RELEASE.jar
spring-data-mongodb-1.9.4.RELEASE.jar
spring-data-mongodb-cross-store-1.9.4.RELEASE.jar
spring-data-mongodb-log4j-1.0.0.M2.jar
spring-expression-4.3.3.RELEASE.jar
spring-jdbc-4.3.3.RELEASE.jar
spring-tx-4.3.3.RELEASE.jar
最后附上兩套源碼下載地址:
兩套源碼下載地址
希望大家都能集成成功,技術(shù)交流群:148797838
關(guān)注公眾號(hào)不定期發(fā)送各種源碼、架構(gòu)福利
總結(jié)
以上是生活随笔為你收集整理的Spring+mongodb集群集成(吐血教程) 转自:http://blog.csdn.net/qq_16497617/article/details/52817335的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。