最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装、客户端操作、安全认证、副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很大。特此记录,以备查看。

文章目录:

MongoDB和Java(1):Linux下的MongoDB安装

MongoDB和Java(2):普通用户启动mongod进程

MongoDB和Java(3):Java操作MongoB

MongoDB和Java(4):Spring Data整合MongoDB(XML配置)

MongoDB和Java(5):Spring Data整合MongoDB(注解配置)

MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群

MongoDB和Java(7):MongoDB用户管理

本文记录如何整合Spring data和MongoDB副本集、分片集群。

Java客户端这边的开发环境和《MongoDB和Java(5):Spring Data整合MongoDB(注解配置)》是一样的,实体类、数据层接口、测试类代码都不需要太多的改动,主要需要改的就是mongo的连接属性文件、MongoClient的创建方式。

源代码下载
MongoDB和Java学习代码.zip

1、副本集环境

主:10.10.13.195:27017
从:10.10.13.195:27018, 10.10.13.195:27019

副本集搭建请参考

生产环境部署MongoDB副本集(带keyfile安全认证以及用户权限)

下面我们就简单介绍一下Spring data整合副本集

2、修改连接属性文件

首先修改mongodb.properties

 # 副本集环境
mongo.rs=10.10.13.195:27017,10.10.13.195:27018,10.10.13.195:27019 # 单机环境
mongo.host=10.10.13.195
mongo.port=27017 # 数据库和验证信息
mongo.dbname=test
mongo.username=xugf
mongo.password=123456 mongo.connectionsPerHost=8
mongo.minConnectionsPerHost=3
mongo.threadsAllowedToBlockForConnectionMultiplier=4
mongo.connectTimeout=1000
mongo.maxWaitTime=1500
mongo.socketKeepAlive=true
mongo.socketTimeout=1500

增加的内容

# 副本集环境
mongo.rs=10.10.13.195:27017,10.10.13.195:27018,10.10.13.195:27019

3、修改MongoConfiguration配置类

首先修改MongoProperties类,主要是添加获取List<ServerAddress>的方法,在此只写了与副本集环境相关的代码片段:

 @Component
@PropertySource(value = "classpath:mongodb.properties")
public class MongoProperties { @Value("${mongo.rs}")
private String rs; private List<ServerAddress> rsServers = new ArrayList<ServerAddress>(); public String getRs() {
return rs;
} public void setRs(String rs) {
this.rs = rs;
} public List<ServerAddress> getRsServers() {
try {
if (rs != null && rs.trim().length() > 0) {
String[] hosts = rs.split(",");
for (String host : hosts) {
String[] ipAndPort = host.split(":");
if (ipAndPort.length == 0) {
continue;
}
if (ipAndPort.length == 1) {
rsServers.add(new ServerAddress(ipAndPort[0], 27017));
} else {
rsServers.add(new ServerAddress(ipAndPort[0], Integer
.parseInt(ipAndPort[1])));
}
}
} else {
rsServers.add(new ServerAddress("localhost", 27017));
return rsServers;
}
} catch (UnknownHostException e) {
}
return rsServers;
}
}

然后修改MongoConfiguration的mongoClient方法,不再使用host + port方式创建MongoClient,而是传入一个List<ServerAddress>,MongoClient会去判断这是一个副本集环境

 public MongoClient mongoClient() throws Exception {

     List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();
credentialsList.add(MongoCredential.createScramSha1Credential(
mongoProperties.getUsername(), mongoProperties.getDbname(),
mongoProperties.getPassword().toCharArray())); Builder builder = MongoClientOptions.builder(); builder.connectionsPerHost(mongoProperties.getConnectionsPerHost());
builder.threadsAllowedToBlockForConnectionMultiplier(mongoProperties
.getThreadsAllowedToBlockForConnectionMultiplier());
builder.connectTimeout(mongoProperties.getConnectTimeout());
builder.maxWaitTime(mongoProperties.getMaxWaitTime());
builder.socketKeepAlive(mongoProperties.isSocketKeepAlive());
builder.socketTimeout(mongoProperties.getSocketTimeout());
builder.minConnectionsPerHost(mongoProperties
.getMinConnectionsPerHost()); // 获取副本集服务器集合
List<ServerAddress> rsServers = mongoProperties.getRsServers(); System.out.println("Rs Servers: " + rsServers); return new MongoClient(rsServers, credentialsList, builder.build());
}

第21行:使用MongoProperties获取服务器地址的列表

第25行:使用public MongoClient(List<ServerAddress> seeds, List<MongoCredential> credentialsList, MongoClientOptions options)构造方法创建MongoClient对象

做了以上改动之后,我们就可以测试了,很简单。

4、分片集群整合

软件系统环境

MongoDB版本 mongodb-linux-x86_64-rhel62-4.0.2
服务器操作系统 CentOS 6.5
服务器IP 10.10.13.195

端口分配

27016 Mongos服务器
27020 副本集sh1,分片1的节点
27021 副本集sh1,分片1的节点
27022 副本集sh1,分片1的节点
27023 副本集configSet,配置服务器
27024 副本集configSet,配置服务器
27025 副本集configSet,配置服务器
27026 副本集sh2,分片2的节点
27027 副本集sh2,分片2的节点
27028 副本集sh2,分片2的节点

分片集群搭建请参考

MongoDB 分片集群技术

Spring Data整合分片集群的方式更加简单,只需要修改连接属性文件即可,配置如下:

 # 分布式集群环境
mongo.rs=10.10.13.195:27016 # 数据库和验证信息
mongo.dbname=test
mongo.username=xugf
mongo.password=123456 mongo.connectionsPerHost=8
mongo.minConnectionsPerHost=3
mongo.threadsAllowedToBlockForConnectionMultiplier=4
mongo.connectTimeout=1000
mongo.maxWaitTime=1500
mongo.socketKeepAlive=true
mongo.socketTimeout=1500

第二行,只需要去连接mongos服务就可以。

其余的都不需要修改,前提是程序操作的实体类在mogos中存在且已经配置了分片键。

5、参考资料

MongoDB 分片集群技术

生产环境部署MongoDB副本集(带keyfile安全认证以及用户权限)

MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群的更多相关文章

  1. MongoDB和Java(5):Spring Data整合MongoDB(注解配置)

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  2. MongoDB和Java(4):Spring Data整合MongoDB(XML配置)

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  3. MongoDB和Java(7):MongoDB用户管理

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  4. spring MVC 整合mongodb

    Spring Mongodb 目录 1 SPRING整合MONGODB 1 1.1 环境准备 1 1.2 包依赖 1 1.3 配置 2 2 案列 5 2.1 SPRING MVC整合MONGODB代码 ...

  5. 使用 Spring Data 进行 MongoDB 4.0 事务处理

    使用 Spring Data 进行 MongoDB 4.0 事务处理 原文链接:http://spring.io/blog/2018/06/28/hands-on-mongodb-4-0-transa ...

  6. JAVA 处理 Spring data mongodb 时区问题

    Spring data mongodb 查询出结果的时候会自动 + 8小时,所以我们看起来结果是对的 但是我们查询的时候,并不会自动 + 8小时,需要自己处理 解决方法 1   @JsonFormat ...

  7. spring+springMVC 整合 MongoDB 实现注册登录

    发现一入手 MongoDB,便无法脱离,简要说一下,MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 也是在 Nosql 中我最喜欢的一种 ...

  8. 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...

  9. Spring boot整合Mongodb

    最近的项目用了Mongodb,网上的用法大多都是七零八落的没有一个统一性,自己大概整理了下,项目中的相关配置就不叙述了,由于spring boot的快捷开发方式,所以spring boot项目中要使用 ...

随机推荐

  1. dateTime格式转换

    select Convert(varchar(8),GETDATE(),112) Select replace(CONVERT(varchar(8), GETDATE(), 108),':','')

  2. asp.netCore3.0 中使用app.UseMvc() 配置路由

    一.新配置路由策略  在 Asp.Net Core 3.0中默认不再支持app.UserMvc() 方式配置路由 系统. 而是使用新的模式,点击查看asp.netCore3.0区域和路由配置变化 默认 ...

  3. Spring(二十三):Spring自动注入的实现方式

    注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解包含:Autowrired/Resource/Qualifier/Service/Controller/Repository/C ...

  4. Java学习-057-Jsoup爬虫获取中国所有的三级行政区划数据(二),并生成数据库 SQL 脚本插入语句

    多不废话,直接上马,小主您稳着... package com.fanfengping.zeus.uitl; import com.alibaba.fastjson.JSONObject; import ...

  5. js数组、对象处理

    js arry: var arry = []; js object: var obj = {}; obj定义属性: obj.filename=''; obj.id=''; 把 obj 添加到 arry ...

  6. phpspreadsheet 中文文档 粗翻版

    2019年10月11日09:32:33 官方使用文档  https://phpspreadsheet.readthedocs.io/en/stable/topics/accessing-cells/ ...

  7. 细说RESTful API之幂等性

    目录 接口幂等性的含义 接口符合幂等性有什么用处 HTTP方法的幂等性与安全性 如何设计符合幂等性的接口 写在最后 接口幂等性的含义 幂等性原本是数学中的含义,表达式的是N次变换与1次变换的结果相同. ...

  8. PPT使用技巧

    推荐两个个人收藏的网站站点(非广告,好东西就应该share) 免费PPT模板下载网站 http://www.1ppt.com 免费图标下载网站 https://www.easyicon.net 一.P ...

  9. 多用户远程连接设置(WindowsServer2008/Win7)

    一.Windows server2008 1.点击计算机--->右键属性打开系统对话框.进行如图设置. 2.在开始菜单--->运行中输入gpedit.msc打开本地组策略编辑器对话框. 3 ...

  10. Overview to “Toon/Cel shading”

    转自:https://blog.felixkate.net/2017/01/19/toon-shading/ For the last couple of weeks I often had disc ...