本品文章只做学习使用;

安装mongodb推荐博客:https://www.jianshu.com/p/a75e26e5f635

1:如何在外网环境下开放mongodb

服务器版本:centos7.6

(1) 保证mongodb的启动配置文件中使用了bind_ip=0.0.0.0

(2) 保证服务器开放了27017端口

(3) 保证云服务器的安全组中开放了27017

可参考我之前的博客:https://www.cnblogs.com/zgq7/p/11564860.html


自述:昨天我在学习的时候使用mongodb桌面工具robo 3T连接我的外网mongodb时可以稳定快速的连接,

但是在我的SpringBoot项目中却一直连接超时,经过重复的实验及思考后分析出了问题所在:

1:我的robo 3T 采用的是SSH连接,让我一直以为mongodb处于外网开放状态

2:我的云服务器没有开放27017端口

3:我的安全组也没有开放27017端口

彻底开放之后可以在服务器上做一下测试:

如出现上图则表示mongodb外网彻底放通了。

2:如何在SpringBoot中整合

我的版本:SpringBoot2.1.7+Java8+Mongodb 4.0

(1): springboot中的依赖

 1     <dependencies>
2 <dependency>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter</artifactId>
5 </dependency>
6
7 <dependency>
8 <groupId>org.springframework.boot</groupId>
9 <artifactId>spring-boot-starter-web</artifactId>
10 </dependency>
11
12 <dependency>
13 <groupId>org.springframework.boot</groupId>
14 <artifactId>spring-boot-starter-data-mongodb</artifactId>
15 </dependency>
16
17 <dependency>
18 <groupId>org.springframework.boot</groupId>
19 <artifactId>spring-boot-starter-test</artifactId>
20 <scope>test</scope>
21 </dependency>
22
23 </dependencies>

(2): model

package com.boot.mongodb.model;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "test")
public class UserModel { @Id
private Object id; private String name; private Integer age; private String from; public UserModel() {
} public UserModel(String name, Integer age) {
this.name = name;
this.age = age;
} public UserModel(Object id, String name, String from) {
this.id = id;
this.name = name;
this.from = from;
} public UserModel(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
} public UserModel(Object id, String name, Integer age, String from) {
this.id = id;
this.name = name;
this.age = age;
this.from = from;
} public Object getId() {
return id;
} public void setId(Object id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public String toString() {
return "UserModel{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", from='" + from + '\'' +
'}';
}
}

1:@Document(collection = "test") 代表该实体映射到该库的test集合

2:@ID 指该字段映射到test集合的ID

(3): 作为持久化有两种方式:

1:使用Repostory的方式

package com.boot.mongodb.repository;

import com.boot.mongodb.model.UserModel;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository; @Repository
public interface UserRepository extends MongoRepository<UserModel, Integer> {
}

增删改查:

    //==============================基于Repository的增删改查
@Test
public void add() {
UserModel userModel = new UserModel(1, "lzq", 23, "Repository");
System.out.println(userRepository.insert(userModel));
} @Test
public void remove() {
UserModel userModel = new UserModel(1, "lzq", 23, "Repository");
userRepository.delete(userModel);
} @Test
public void update() {
UserModel userModel = new UserModel(2, "lzq", 24, "Repository");
//有则修改,无则新增
System.out.println(userRepository.save(userModel));
} @Test
public void find() {
System.out.println(userRepository.findAll());
UserModel userModel = new UserModel(2, "lzq", 24, "Repository");
Example example = Example.of(userModel);
System.out.println(userRepository.findOne(example));
System.out.println(userRepository.findAll(example));
}

2:使用MongoTemplate的方式,不用创建对应的Repostroy

增删改查

    //===============================基于MongoTemplate的增删改查
@Test
public void tadd() {
UserModel userModel = new UserModel(3, "lzq", 24, "MongoTemplate");
logger.info("{}", mongoTemplate.insert(userModel));
} @Test
public void tdelete() {
//UserModel userModel = new UserModel(3, "lzq", 24, "MongoTemplate");
//输出删除的行数
//System.out.println(mongoTemplate.remove(userModel).getDeletedCount());
Query query = new Query(Criteria.where("id").is(3));
logger.info("{}", mongoTemplate.remove(query, UserModel.class).getDeletedCount());
} @Test
public void tupdate() {
Query query = new Query(Criteria.where("id").is(3));
Update update = new Update().set("name", "2333333");
logger.info("{}", mongoTemplate.updateFirst(query, update, UserModel.class));
} @Test
public void tfind() {
Query query = new Query(Criteria.where("id").is(3));
logger.info("{}", mongoTemplate.find(query, UserModel.class));
}

3:完整项目github地址:https://github.com/zgq7/boot_collections/tree/master/boot_mongodb

欢迎私聊互相学习。

SpringBoot整合Mongodb4.0的更多相关文章

  1. SpringBoot整合Graylog3.0

    Graylog简介 Graylog是一个开源的完整的日志管理工具,功能和ELK类似,安装部署更方便. 官方网站 https://www.graylog.org 搭建 使用docker快速搭建 参考 h ...

  2. springboot 整合 mybatis 入门

    springboot整合mybatis 0.yml 配置文件 1.创建数据库表. 2.创建实体类. 3.创建 Mapper 接口 ,添加 @Mapper 注解. 4.创建 Mapper 映射文件. & ...

  3. solr8.0 springboot整合solr(四)

    引言: solr搭建起后,就该应用到java后台开发里了,接下来就用springboot整合应用solr 一:引入jar包 <!--solr--> <dependency> & ...

  4. SpringBoot整合MyBatis与MySql8.0

    一.前言 之前已经有一篇文章讨论过SpringBoot整合MyBatis,因而此篇不在重复累赘,本文主要是最新版的SpringBoot2.0与MyBatis.最新MySQL8.0整合过程中遇到的问题进 ...

  5. Springboot(2.0.0.RELEASE)+spark(2.1.0)框架整合到jar包成功发布(原创)!!!

    一.前言 首先说明一下,这个框架的整合可能对大神来说十分容易,但是对我来说十分不易,踩了不少坑.虽然整合的时间不长,但是值得来纪念下!!!我个人开发工具比较喜欢IDEA,创建的springboot的j ...

  6. Activiti工作流学习之SpringBoot整合Activiti5.22.0实现在线设计器(二)

    一.概述 网上有很多关于Eclipse.IDEA等IDE插件通过拖拽的方式来画工作流程图,个人觉得还是不够好,所以花点时间研究了一下Activiti在线设计器,并与SpringBoot整合. 二.实现 ...

  7. SpringBoot第十一集:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂)

    SpringBoot第十一集:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂) 一,整合Swagger3.0 随着Spring Boot.Spring Cloud等微服务的 ...

  8. Springboot:SpringBoot2.0整合WebSocket,实现后端数据实时推送!

    一.什么是WebSocket? B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不 ...

  9. spring-boot整合mybatis(1)

    sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...

随机推荐

  1. Thank in Java

    Think in Java 2.一切都是对象 2.1 引用操作对象 Java 中一切都是对象,因此可以采用单一固定得语法. 操作对象得标识符实际上是对对象得一个 "引用"refer ...

  2. LA 3641 Leonardo的笔记本 & UVA 11077 排列统计

    LA 3641 Leonardo的笔记本 题目 给出26个大写字母的置换B,问是否存在要给置换A,使得 \(A^2 = B\) 分析 将A分解为几个循环,可以观察经过乘积运算得到\(A^2\)后,循环 ...

  3. Codeforces Round #641 (Div. 2)

    只写了A~D A - Orac and Factors 题意:f(n)就是n的第二小因数,问执行k次 n=f(n)+n 后的结果. 题解:如果一直找第二小的因子的话,1e9肯定得t.看下边样例解释就会 ...

  4. poj3415 Common Substrings (后缀数组+单调队列)

    Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 9414   Accepted: 3123 Description A sub ...

  5. Codeforces Round #654 (Div. 2) B. Magical Calendar (结论)

    题意:你需要在长度从\(1\)~\(k\),宽度无限的网格图中造图形(每个点四周必须连通),问最多能造出多少种不同的图形. 题解:感觉没什么好说的,就是画图找规律,如果\(r\ge n\)的话(即没有 ...

  6. 2019 ICPC Asia Taipei-Hsinchu Regional Problem K Length of Bundle Rope (贪心,优先队列)

    题意:有\(n\)堆物品,每次可以将两堆捆成一堆,新堆长度等于两个之和,每次消耗两个堆长度之和的长度,求最小消耗使所有物品捆成一堆. 题解:贪心的话,每次选两个长度最小的来捆,这样的消耗一定是最小的, ...

  7. .Net下的PDF打印

    简单研究了一下.Net下的PDF打印,一路发现了很多小坑. 第三方组件 这里使用的解析PDF的组件是mupdf,特点和C#调用在 这里 有介绍. 实现的功能 支持页面大小.边距.打印机选择.打印机dp ...

  8. Python_小程序

    一.开发前的准备工作 1.申请AppID:一个账号对应一个小程序,个人/个体只能申请5个小程序 2.下载开发工具 二.小程序的文件结构 三. 1.数据绑定 1.1数据的设置 Page( data:{ ...

  9. kubernetes进阶(六)k8s平滑升级

    当我们遇到K8S有漏洞的时候,或者为了满足需求,有时候可能会需要升级或者降级版本, 为了减少对业务的影响,尽量选择在业务低谷的时候来升级: 首先准备好文件:我这里选择的是内网文件服务器上下载的,请自行 ...

  10. 【原创】Linux虚拟化KVM-Qemu分析(九)之virtio设备

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...