一灰灰blog 一灰灰blog
首页
  • InfluxDB
  • MongoDB
  • MySql
  • 基础系列
  • DB系列
  • 搜索系列
  • MQ系列
  • WEB系列
  • 中间件
  • 运维
  • SpringSecurity
  • SpringCloud
  • QuickAlarm
  • QuickCrawer
  • QuickFix
  • QuickMedia
  • QuickSpi
  • QuickTask
  • 高可用
  • 分类
  • 标签
  • 归档
  • 收藏
  • 关于
GitHub (opens new window)

一灰灰blog

资深搬运工
首页
  • InfluxDB
  • MongoDB
  • MySql
  • 基础系列
  • DB系列
  • 搜索系列
  • MQ系列
  • WEB系列
  • 中间件
  • 运维
  • SpringSecurity
  • SpringCloud
  • QuickAlarm
  • QuickCrawer
  • QuickFix
  • QuickMedia
  • QuickSpi
  • QuickTask
  • 高可用
  • 分类
  • 标签
  • 归档
  • 收藏
  • 关于
GitHub (opens new window)
  • 基础系列

  • DB系列

    • H2Database

    • JPA

    • JdbcTemplate

    • Jooq

    • Mybatis

    • 事务

    • MongoDB

      • 【DB系列】MongoDB之基本环境搭建与使用
        • I. 环境搭建
          • 1. docker 安装
          • 2. mongo 安装使用
        • II. SpringBoot工程配置
          • 1. pom依赖
          • 2. 配置文件
          • 3. 测试使用
          • 4. 说明
        • III. 其他
          • 0. 项目
          • 1. 一灰灰Blog
          • 2. 声明
          • 3. 扫描关注
      • 【DB系列】MongoDB之查询基本使用姿势
      • 【DB系列】MongoDB之如何新增文档
      • 【DB系列】MongoDB之修改基本使用姿势
    • Redis

    • 实例

  • 搜索系列

  • MQ系列

  • WEB系列

  • 中间件

  • 运维

  • SpringSecurity

  • SpringCloud

  • Spring系列
  • DB系列
  • MongoDB
一灰灰
2018-12-13

【DB系列】MongoDB之基本环境搭建与使用

SpringBoot结合mongodb进行业务开发,也属于比较基本的需求了,本文为mongo系列的基本篇,主要就是环境搭建、工程的配置设置相关

# I. 环境搭建

正式开始之前,第一步就是需要安装Mongo的环境了,因为环境的安装和我们spring的主题没有太大的关系,因此我们选择最简单的使用姿势:直接用docker来安装mongo来使用

下面的安装过程都是mac环境,其他操作系统可以直接安装mongodb,移步相关教程

# 1. docker 安装

可以直接到官网进行下载安装,但是对系统版本有要求,所以需要使用Docker ToolBox,实际试过之后,感觉不太好用,实际上是将docker安装到虚拟机中了,下面直接使用brew命令进行安装

安装命令

brew cask install docker
1

执行完毕之后,会多一个应用名为 docker, 双击运行,输入密码等即可

# 2. mongo 安装使用

直接使用官方的mongo镜像即可,然后绑定端口映射,就可以在宿主机中使用mongo

# 下载镜像
docker pull mongo
# 加载并运行镜像
docker run --name mongo -p 27017:27017 -d mongo --auth
# 进入容器
docker exec -it d9132f1e8b26 /bin/bash
# 为mongo创建登录用户和密码
mongo
use admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})
exit
1
2
3
4
5
6
7
8
9
10
11

上面完毕之后,可以在宿主机进行连接测试,判断是否安装成功

# II. SpringBoot工程配置

# 1. pom依赖

整个框架选择的是spring-boot,所有spring这一套相关的pom配置少不了,我们主要需要注意的包就是spring-boot-starter-data-mongodb

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    <java.version>1.8</java.version>
</properties>

<dependencies>
   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.45</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

# 2. 配置文件

配置文件如下,主要就是连接mongo的url

spring.data.mongodb.uri=mongodb://root:root@localhost:27017/basic?authSource=admin&authMechanism=SCRAM-SHA-1
1

通过上面的实例,也知道格式如下:

mongodb://用户名:密码@host:port/dbNmae?参数

  • 当没有用户名和密码时,可以省略掉中间的 root:root@;
  • 当需要认证时,请格外注意
    • mongodb新版的验证方式改成了SCRAM-SHA-1,所以参数中一定一定一定得加上
      • ?authSource=admin&authMechanism=SCRAM-SHA-1
    • 如果将mongodb的验证方式改成了MONGODB-CR, 则上面的可以不需要

# 3. 测试使用

写一个简单的测试类,看下mongodb是否连接成功,是否可以正常操作

@Slf4j
@Component
public class MongoTemplateHelper {

    @Getter
    @Setter
    private MongoTemplate mongoTemplate;

    public MongoTemplateHelper(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }



    /**
     * 保存记录
     *
     * @param params
     * @param collectionName
     */
    public void saveRecord(Map<String, Object> params, String collectionName) {
        mongoTemplate.save(params, collectionName);
    }

    /**
     * 精确查询方式
     *
     * @param query
     * @param collectionName
     */
    public void queryRecord(Map<String, Object> query, String collectionName) {
        Criteria criteria = null;
        for (Map.Entry<String, Object> entry : query.entrySet()) {
            if (criteria == null) {
                criteria = Criteria.where(entry.getKey()).is(entry.getValue());
            } else {
                criteria.and(entry.getKey()).is(entry.getValue());
            }
        }

        Query q = new Query(criteria);
        Map result = mongoTemplate.findOne(q, Map.class, collectionName);
        log.info("{}", result);
    }
}
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
45

上面提供了两个方法,新增和查询,简单的使用姿势如

@SpringBootApplication
public class Application {

    private static final String COLLECTION_NAME = "personal_info";


    public Application(MongoTemplateHelper mongoTemplateHelper) {
        Map<String, Object> records = new HashMap<>(4);
        records.put("name", "小灰灰Blog");
        records.put("github", "https://github.com/liuyueyi");
        records.put("time", LocalDateTime.now());

        mongoTemplateHelper.saveRecord(records, COLLECTION_NAME);

        Map<String, Object> query = new HashMap<>(4);
        query.put("name", "小灰灰Blog");
        mongoTemplateHelper.queryRecord(query, COLLECTION_NAME);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

然后开始执行,查看输出,结果演示如下

gif.gif

# 4. 说明

最后针对认证的问题,需要额外提一句,开始测试的时候,使用的配置如下

spring.data.mongodb.username=root
spring.data.mongodb.password=root
spring.data.mongodb.authentication-database=basic
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
1
2
3
4
5

然而因为mongo采用的是SHA-1加密方式,所以始终验证不通过;然后查了一下,各种让改mongo的验证版本,改回去用CR的方式;但明显这种并不是一种好的解决方式,既然新的版本选择了新的加密方式,总有他的理由,所以应该改的还是spring的使用姿势;目前还没找到匹配上面这种配置方式的解决方案;

本文选择的是用url的方式指定加密方式来解决这个问题,当然研究下后面这种方式内部实现,应该就能知道前面的可以怎么解决,这点记下来,后续再开坑填

# III. 其他

# 0. 项目

  • 工程:spring-boot-demo (opens new window)
  • module: 110-mongo-basic (opens new window)

# 1. 一灰灰Blog

  • 一灰灰Blog个人博客 https://blog.hhui.top (opens new window)
  • 一灰灰Blog-Spring专题博客 http://spring.hhui.top (opens new window)

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

# 2. 声明

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

  • 微博地址: 小灰灰Blog (opens new window)
  • QQ: 一灰灰/3302797840

# 3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

编辑 (opens new window)
#Mongo
上次更新: 2021/10/15, 19:56:22
【DB系列】编程式事务使用姿势介绍篇
【DB系列】MongoDB之查询基本使用姿势

← 【DB系列】编程式事务使用姿势介绍篇 【DB系列】MongoDB之查询基本使用姿势→

最近更新
01
【基础系列】基于maven多环境配置
04-25
02
【WEB系列】内嵌Tomcat配置Accesslog日志文件生成位置源码探索
04-24
03
【搜索系列】ES查询常用实例演示
04-18
更多文章>
Theme by Vdoing | Copyright © 2017-2022 一灰灰Blog
MIT License | 鄂ICP备18017282号 |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×