mongoDB主从读写分离

MongoDB官方已经不建议使用主从模式了,替代方案是采用副本集的模式, 点击查看。如果您的环境不符合副本集模式可参考本文,来实现主从读写分离。
resources.properties
mongodb_read.host=10.0.0.45 mongodb_read.port=27017 mongodb_read.apname=ecsp mongodb_read.username= mongodb_read.password= mongodb_write.host=10.0.0.46 mongodb_write.port=27017 mongodb_write.apname=ecsp mongodb_write.username= mongodb_write.password=
mongo_config.xml
<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/context
http://www.springframework.org/schema/context/spring-context-2.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 连接数据库信息 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:resources.properties</value>
</list>
</property>
</bean>
<!-- 读start -->
<bean id="mongoServerReadAddress" class="com.mongodb.ServerAddress">
<constructor-arg value="${mongodb_read.host}"></constructor-arg>
<constructor-arg value="${mongodb_read.port}"></constructor-arg>
</bean>
<bean id="chexunMongoReadOptions" class="com.ecsp.chexun.mongo.ChexunMongoOptions">
<property name="username" value="${mongodb_read.username}" />
<property name="password" value="${mongodb_read.password}" />
<property name="dbname" value="${mongodb_read.apname}" />
<property name="connectionsPerHost" value="100" />
<property name="threadsAllowedToBlockForConnectionMultiplier"
value="5" />
<property name="slaveOk" value="true" />
</bean>
<bean id="mongo_read" class="com.mongodb.Mongo">
<constructor-arg ref="mongoServerReadAddress"></constructor-arg>
<constructor-arg ref="chexunMongoReadOptions"></constructor-arg>
</bean>
<!-- 读end -->
<!-- 写start -->
<bean id="mongoServerWriteAddress" class="com.mongodb.ServerAddress">
<constructor-arg value="${mongodb_write.host}"></constructor-arg>
<constructor-arg value="${mongodb_write.port}"></constructor-arg>
</bean>
<bean id="chexunMongoWriteOptions" class="com.ecsp.chexun.mongo.ChexunMongoOptions">
<property name="username" value="${mongodb_write.username}" />
<property name="password" value="${mongodb_write.password}" />
<property name="dbname" value="${mongodb_write.apname}" />
<property name="connectionsPerHost" value="100" />
<property name="threadsAllowedToBlockForConnectionMultiplier"
value="5" />
</bean>
<bean id="mongo_write" class="com.mongodb.Mongo">
<constructor-arg ref="mongoServerWriteAddress"></constructor-arg>
<constructor-arg ref="chexunMongoWriteOptions"></constructor-arg>
</bean>
<!-- 写end -->
<!-- 链接对象注入start -->
<bean id="mongoHelper" class="com.ecsp.chexun.mongo.MongoHelper">
<constructor-arg ref="mongo_read"></constructor-arg>
<constructor-arg ref="mongo_write"></constructor-arg>
</bean>
<!-- 链接对象注入end -->
</beans>
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/mongo_config.xml
</param-value>
</context-param>
实体层ChexunMongoOptions.Java
package com.ecsp.chexun.mongo;
import javax.net.SocketFactory;
import com.mongodb.DBDecoderFactory;
import com.mongodb.MongoOptions;
/**
* Mongo配置类
*
* @author vincent.he
* @version 1.0, Created on 2012-3-12
*
*/
public class ChexunMongoOptions extends MongoOptions{
private String username;
private String password;
private String dbname;
public ChexunMongoOptions(){
super();
}
public void setDescription(String description) {
this.description = description;
}
public void setConnectionsPerHost(int connectionsPerHost) {
this.connectionsPerHost = connectionsPerHost;
}
public void setThreadsAllowedToBlockForConnectionMultiplier(
int threadsAllowedToBlockForConnectionMultiplier) {
this.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier;
}
public void setMaxWaitTime(int maxWaitTime) {
this.maxWaitTime = maxWaitTime;
}
public void setConnectTimeout(int connectTimeout) {
this.connectTimeout = connectTimeout;
}
public void setSocketTimeout(int socketTimeout) {
this.socketTimeout = socketTimeout;
}
public void setSocketKeepAlive(boolean socketKeepAlive) {
this.socketKeepAlive = socketKeepAlive;
}
public void setAutoConnectRetry(boolean autoConnectRetry) {
this.autoConnectRetry = autoConnectRetry;
}
public void setMaxAutoConnectRetryTime(long maxAutoConnectRetryTime) {
this.maxAutoConnectRetryTime = maxAutoConnectRetryTime;
}
public void setSlaveOk(boolean slaveOk) {
this.slaveOk = slaveOk;
}
public void setDbDecoderFactory(DBDecoderFactory dbDecoderFactory) {
this.dbDecoderFactory = dbDecoderFactory;
}
public void setSafe(boolean safe) {
this.safe = safe;
}
public void setW(int w) {
this.w = w;
}
public void setWtimeout(int wtimeout) {
this.wtimeout = wtimeout;
}
public void setFsync(boolean fsync) {
this.fsync = fsync;
}
public void setJ(boolean j) {
this.j = j;
}
public void setSocketFactory(SocketFactory socketFactory) {
this.socketFactory = socketFactory;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDbname() {
return dbname;
}
public void setDbname(String dbname) {
this.dbname = dbname;
}
}
Java dao层
package com.ecsp.chexun.mongo;
import java.util.List;
import com.mongodb.BasicDBObject;
import com.mongodb.CommandResult;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
/**
* mongo 操做方法
* @author zhanglibing
*
*/
public class MongoHelper {
private Mongo mongo;
private Mongo mongo_read;
private Mongo mongo_write;
private String dataBaseName = "cxec";
public MongoHelper(){}
public MongoHelper(Mongo mongo,Mongo mongo_read,Mongo mongo_write){
this.mongo = mongo;
this.mongo_read = mongo_read;
this.mongo_write = mongo_write;
}
// public MongoHelper(String dbName){
// dataBaseName = dbName;
// }
public int add(String collectionName,BasicDBObject dbObject){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_write.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
return dbc.save(dbObject).getN();
}
//批量添加
public int addAll( String collectionName,List<DBObject> list){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_write.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
return dbc.insert(list).getN();
}
public int isExists(String collectionName,BasicDBObject query){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
return dbc.find(query).size();
}
public List<DBObject> get(String collectionName,BasicDBObject query){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
return dbc.find(query).toArray();
}
public int getCount(String collectionName,BasicDBObject query){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
return dbc.find(query).count();
}
public List<DBObject> get(String collectionName,BasicDBObject query,BasicDBObject keys){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
return dbc.find(query, keys).toArray();
}
/***
* 获取mongo 中 collection 的值
* @param collectionName
* @param query 查询条件
* @param keys 查询字段
* @param batchSize 返回个数
* @return
*/
public List<DBObject> get(String collectionName,BasicDBObject query,BasicDBObject keys,BasicDBObject orderBy,int batchSize){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
if(orderBy != null){
return dbc.find(query, keys).sort(orderBy).limit(batchSize).toArray();
}
return dbc.find(query, keys).limit(batchSize).toArray();
}
public List<DBObject> get(String collectionName,BasicDBObject query,BasicDBObject keys,BasicDBObject orderBy,int batchSize,int n){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
if(orderBy != null){
return dbc.find(query, keys).sort(orderBy).limit(batchSize).skip(n).toArray();
}
return dbc.find(query, keys).limit(batchSize).toArray();
}
public List<DBObject> get(String collectionName,DBObject query,int batchSize){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
return dbc.find(query).limit(batchSize).toArray();
}
public List<DBObject> get(String collectionName,int number){
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
List<DBObject> dboList = dbc.find().skip(0).limit(number).toArray();
return dboList;
}
public List<DBObject> get(String collectionName,BasicDBObject query,BasicDBObject orderBy,int n,int pageSize ){
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
List<DBObject> dboList = dbc.find(query).sort(orderBy).skip(n).limit(pageSize).toArray();
return dboList;
}
public List<DBObject> get(String collectionName,BasicDBObject query,int top ){
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
List<DBObject> dboList = dbc.find(query).skip(0).limit(top).toArray();
return dboList;
}
public List<DBObject> get(String collectionName,DBObject query,DBObject orderBy,int batchSize){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_read.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
return dbc.find(query).sort(orderBy).limit(batchSize).toArray();
}
public int reomve(String collectionName,BasicDBObject o){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_write.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
return dbc.remove(o).getN();
}
public int edit(String collectionName,BasicDBObject query,BasicDBObject update){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo_write.getDB(dataBaseName);
DBCollection dbc = db.getCollection(collectionName);
return dbc.update(query, update).getN();
//return dbc.updateMulti(query, update).getN();
}
public int edit(String cmd){
// DB db = MongoManager.getDB(dataBaseName);
DB db = mongo.getDB(dataBaseName);
CommandResult cmdResult = db.command(cmd);
if(cmdResult.ok())
{
return 1;
}
return 0;
}
// public DBCollection get(String collectionName){
//// DB db = MongoManager.getDB(dataBaseName);
// DB db = mongo.getDB(dataBaseName);
// return db.getCollection(collectionName);
// }
public void setMongo(Mongo mongo) {
this.mongo = mongo;
}
public void setMongo_read(Mongo mongo_read) {
this.mongo_read = mongo_read;
}
public void setMongo_write(Mongo mongo_write) {
this.mongo_write = mongo_write;
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# mongoDB主从读写分离
# mongoDB主从读写分离详解
# mongoDB主从读写分离实例代码
# Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
# Python实现批量读取图片并存入mongodb数据库的方法示例
# python读取json文件并将数据插入到mongodb的方法
# 了不起的node.js读书笔记之mongodb数据库交互
# mongodb的写操作
# mongodb与sql关系型数据比较
# mongodb使用c#驱动数据插入demo
# c#操作mongodb插入数据效率
# mongodb实现数组对象求和方法实例
# Mongodb读数据操作
# 您的
# 希望能
# 点击查看
# 不符合
# 谢谢大家
# 来实现
# 连接数据库
# chexun
# ChexunMongoOptions
# chexunMongoReadOptions
# constructor
# arg
# dbname
# slaveOk
# true
# threadsAllowedToBlockForConnectionMultiplier
# connectionsPerHost
# ServerAddress
# PropertyPlaceholderConfigurer
# property
相关文章:
建站之星安装提示数据库无法连接如何解决?
学校建站服务器如何选型才能满足性能需求?
北京网站制作网页,网站升级改版需要多久?
代购小票制作网站有哪些,购物小票的简要说明?
如何快速搭建高效可靠的建站解决方案?
如何通过PHP快速构建高效问答网站功能?
建站主机解析:虚拟主机配置与服务器选择指南
如何在Golang中使用replace替换模块_指定本地或远程路径
如何设置并定期更换建站之星安全管理员密码?
如何制作网站标识牌,动态网站如何制作(教程)?
如何在建站宝盒中设置产品搜索功能?
平台云上自助建站如何快速打造专业网站?
如何在宝塔面板中修改默认建站目录?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
建站之星安装步骤有哪些常见问题?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
网站代码制作软件有哪些,如何生成自己网站的代码?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
建站之星后台管理系统如何操作?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
如何自定义建站之星网站的导航菜单样式?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何配置IIS站点权限与局域网访问?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
宿州网站制作公司兴策,安徽省低保查询网站?
宁波自助建站系统如何快速打造专业企业网站?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何快速重置建站主机并恢复默认配置?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
大同网页,大同瑞慈医院官网?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何通过云梦建站系统实现SEO快速优化?
nginx修改上传文件大小限制的方法
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
建站之星如何快速更换网站模板?
如何获取免费开源的自助建站系统源码?
如何配置支付宝与微信支付功能?
如何用VPS主机快速搭建个人网站?
图册素材网站设计制作软件,图册的导出方式有几种?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
全景视频制作网站有哪些,全景图怎么做成网页?
常州企业建站如何选择最佳模板?
如何高效配置香港服务器实现快速建站?
建站主机服务器选购指南:轻量应用与VPS配置解析
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
*请认真填写需求信息,我们会在24小时内与您取得联系。