Java实战操作MongoDB集群_第1页
Java实战操作MongoDB集群_第2页
Java实战操作MongoDB集群_第3页
Java实战操作MongoDB集群_第4页
Java实战操作MongoDB集群_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本文的原文地址是:/image/index3.htmlSpring提供了MongoDB操作的工具:MongoTemplate,使得在Spring环境下对MongoDB的操作更为便利,本章我们就来学一下如何用MongoTemplate对MongoDB的集群环境(副本集)做操作;实战环境选用Docker本次实战,Web工程和MongoDB都运行在Docker环境的容器中,这么做是为了快速搭建环境,不要在环境上花费太多时间,更聚焦Java开发;Java源码本次实战的java工程的源码我已经上传到github了,地址是::zq25

2、99/blog_demos.git,里面有多个工程,本次实战的工程是mongodbreplicationdemo,如下图红框所示:环境规划本次实战的环境是一个Tomcat server和Mongodb集群(副本集),我们将在Docker下部署这些server,所以一共要运行以下四个容器:容器名ip备注m0MongoDB Primarym1MongoDB Secondary1m2MongoDB Secondary2tomcat001Tomcat server相互关系如下图:关于Tomcat server环境本次实战我

3、们用Maven创建一个java web工程,然后在线部署到Docker上去,Tomcat的镜像请用bolingcavalry/online_deploy_tomcat:0.0.1,关于在线部署的详情请参照文章实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署关于MongoDB集群环境搭建MongoDB副本集的集群环境不是本章的重点,这篇文章详细的记录了如何搭建集群环境,您可以作为实战参考:Docker下,实战mongodb副本集(Replication)docker-compose.yml配置由于要启动四个容器:Mongodb集群和Tomcat Server

4、,所以用docker-compose批量管理比较方便,docker-compose.yml内容如下:version: 2services: m0: image: bolingcavalry/ubuntu16-mongodb349:0.0.1 container_name: m0 command: /bin/sh -c mongod -replSet replset0 restart: always m1: image: bolingcavalry/ubuntu16-mongodb349:0.0.1 container_name: m1 depends_on: - m0 command: /bi

5、n/sh -c mongod -replSet replset0 restart: always m2: image: bolingcavalry/ubuntu16-mongodb349:0.0.1 container_name: m2 depends_on: - m1 command: /bin/sh -c mongod -replSet replset0 restart: always tomcat001: image: bolingcavalry/online_deploy_tomcat:0.0.1 container_name: tomcat001 ports: - 8080:8080

6、 links: - m0:mongodb0 - m1:mongodb1 - m2:mongodb2 restart: always 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31如上述yml脚本所示,m0、m1、m2这三个容器组成了副本集集群,tomcat001容器配置的link属性中包含了其他三个容器,所以原本需要直接使用IP地址的地方都可以用mongodb0、mongodb1、mongodb2来代替了;启动容器,把集群环境配置好在docker-compose.yml文件所

7、在目录下,执行命令docker-compose up -d批量启动所有容器,再进入m0容器把集群环境配置好,配置方法非常简单,请参考Docker下,实战mongodb副本集(Replication)终于,准备工作已经完成,咱们可以开始编码了;依赖库在我们的pom.xml中,除了常规的spring依赖,还要加入本次用到的MongoDB操作的依赖: org.springframework.data spring-data-mongodb 1.2.0.RELEASE 1 2 3 4 5另外为了更方便的查看数据,我们把fastjson的依赖也引进来: com.alibaba fastjson 1.2.

8、39 1 2 3 4 5资源文件工程用到的资源文件一共四个,如下图:1. perties放的是MongoDB集群的所有机器地址和端口,以及要连接的数据库:mongodb.host=mongodb0:27017,mongodb1:27017,mongodb2:27017mongodb.dataname=school 1 2如上所示,机器地址并没有用IP,而是link参数中的alias:mongodb0,mongodb1,mongodb2;2. logback.xml日志配置,不细说了;3. spring-extends.xml这里面存放的是操作MongoDB所需的配置信息,m

9、ongoTemplate这个bean负责提供操作MongoDB的服务,请注意更改xmlns:mongo和xsi:schemaLocation的配置,负责会导致xml解析失败: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33在业务代码中通过AutoWire引入mongoTemplate,就能操作MongoDB了;5. spring-mvc.xmlSpring环境的常规配置,不用多说了;此外还有web.xml文件也要注意,要将spring-extends.xml引入:

10、 contextConfigLocation classpath:spring-extends.xml 1 2 3 4代码结构代码结构如下图所示,我们通过浏览器发起的增删改查操作都会由MongodbController来处理,它会调用StudentService接口的服务,和数据库有关的实体类是Student:Student实体类实体类没什么好说的,主要是注意Document注解,说明了该类是student集合对应的实体类:Document(collection = student)public class Student /* * 学号 */ private String id; /* *

11、姓名 */ private String name; /* * 年龄 */ private int age; . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18服务实现类,操作MongoDB的核心代码下面是通过提供的API对MongoDB进行增删改查的代码:Autowired MongoTemplate mongoTemplate; /* * 新增一个文档 * param student * return */ public String insert(Student student) LOGGER.info(start insert : , JSON

12、.toJSONString(student); mongoTemplate.insert(student); LOGGER.info(finish insert); return null; /* * 根据名称删除文档 * param name * return */ public String deleteByName(String name) LOGGER.info(start delete , name); Query query = new Query(); Criteria criteria = new Criteria(); criteria.and(name).is(name);

13、 query.addCriteria(criteria); mongoTemplate.findAndRemove(query, Student.class); return null; /* * 根据名称修改student文档的年龄字段 * param student * return */ public String updateByName(Student student) LOGGER.info(start update , JSON.toJSONString(student); /构造查询信息 Query query = buildNameQuery(student.getName(

14、); /构造更新信息 Update update = new Update(); update.set(age, student.getAge(); /执行更新 mongoTemplate.updateFirst(query, update, Student.class); return null; /* * 查找student集合的所有文档 * return */ public List findAll() return mongoTemplate.findAll(Student.class); /* * 创建一个根据名字查询的Query对象 * param name * return */

15、 private Query buildNameQuery(String name) Query query = new Query(); Criteria criteria = new Criteria(); criteria.and(name).is(name); query.addCriteria(criteria); return query; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

16、 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72Controller对Service的调用此处Controller的作用是受到web请求后直接调用Service提供的API来完成数据库操作: Autowired StudentService studentService; RequestMapping(/insert) public String insert(HttpServletRequest request, Model model) String errorStr =

17、 studentService.insert(buildStudent(request); LOGGER.info(student insert service response , errorStr); return StringUtils.isEmpty(errorStr) ? success : buileFilePageInfo(errorStr, model); RequestMapping(/delete) public String delete(HttpServletRequest request, Model model) String name = get(request,

18、 name); String errorStr = studentService.deleteByName(name); LOGGER.info(student deleteByName service response , errorStr); return StringUtils.isEmpty(errorStr) ? success : buileFilePageInfo(errorStr, model); RequestMapping(/update) public String update(HttpServletRequest request, Model model) Strin

19、g errorStr = studentService.updateByName(buildStudent(request); LOGGER.info(student updateByName service response , errorStr); return StringUtils.isEmpty(errorStr) ? success : buileFilePageInfo(errorStr, model); RequestMapping(/findall) ResponseBody public String findAll(HttpServletRequest request, Model model) List list = studentService.findAll(); return (null!=list & !list.isEmpty() ? JSON.toJSONString(list) : empty; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39部署代码写好了,pom.xml所在目录下执行mvn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论