本品文章只做学习使用;

安装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. Spring Boot 2.x基础教程:使用JTA实现多数据源的事务管理

    在一个Spring Boot项目中,连接多个数据源还是比较常见的.之前也介绍了如何在几种常用框架的场景下配置多数据源,具体可见: Spring Boot 2.x基础教程:JdbcTemplate的多数 ...

  2. Codeforces Round #672 (Div. 2) D. Rescue Nibel!(排序)

    题目链接:https://codeforces.com/contest/1420/problem/D 前言 之前写过这场比赛的题解,不过感觉这一题还可以再单独拿出来好好捋一下思路. 题意 给出 $n$ ...

  3. pta—紧急救援 (dijkstra)

    题目连接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 题面: 作为一个城市的应急救援队伍 ...

  4. python+fiddler 抓取抖音数据包并下载抖音视频

    这个我们要下载视频,那么肯定首先去找抖音视频的url地址,那么这个地址肯定在json格式的数据包中,所以我们就去专门查看json格式数据包 这个怎么找我就不用了,直接看结果吧 你找json包,可以选大 ...

  5. 行业动态 | 腾讯合作商Babylon使用Cassandra保护患者数据并提高医疗效果

    医疗世界正在快速朝向个性化和低成本的方向发展,Babylon Health看到了这样的机会--通过开创性的云端应用来大幅扩张和改进他们所提供的服务.   通过使用基于Apache Cassandra的 ...

  6. windows安装

    1.windows系统版本分类a. 个人版windows98.XP.win7,win8,win10b. 企业版/服务器版windows server NT/2000/2003/2008/2012[广泛 ...

  7. LINUX - 通信

    为什么三次握手: 让服务端和客户端都知道,自己的收信能力和发信能力没有问题: 第一次:客户端发给服务端--服务端知道了,自己的收信能力和客户端的发信能力没有问题: 第二次:服务端回复客户端--客户端知 ...

  8. l2-002 链表去重 (未解决)

    L2-002. 链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个带整数键值的单链表L,本题要求你编写程序,删除 ...

  9. H.264视频压缩标准

    H.264 这部分一直在讲,但是却没有系统的来说.接下来要详细. 参看:H.264视频压缩标准 一.简介 H.264是最新的视频压缩标准,它也称为MPEG-4 Part 10或AVC(高级视频编码). ...

  10. Unknown command '\b'. 关于Mysql导入外部数据库脚本报错的解决

    来自网络转载 还是字符集的问题 使用source导入外部sql文件: mysql> source F:\php\bookorama.sql;--------------source F:---- ...