Spring Boot 2.x实战89 - 响应式编程4 - Reactive NoSQL之Reactive MongoDB

3.2 响应式MongoDB

在这一节我们在演示一下响应式MongoDB的应用,首先我们先安装MongoDB。

3.2.1 MongoDB安装

使用docker compose安装MongoDb。

stack.yml

version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

执行命令:

$ docker-compose -f stack.yml up -d

我们使用Navicat for MongoDB连接MongoDB:

在这里插入图片描述

建立数据库first_db及其对应的账号wisely,密码zzzzzz
在这里插入图片描述

编辑用户的角色为first_db.dbOwner
在这里插入图片描述

3.2.2 Spring Boot的自动配置

Spring Boot为响应式MongoDB的提供下面的自动配置:

  • MongoReactiveAutoConfiguration:自动配置响应式MongoDB客户端的Bean:reactiveStreamsMongoClient
  • MongoReactiveDataAutoConfiguration:自动配置Spring Data响应式MongoDB所需的ReactiveMongoTemplate的Bean;
  • MongoReactiveRepositoriesAutoConfiguration:自动配置Spring Data 响应式MongoDB Repository。

外部配置使用MongoProperties通过spring.data.mongodb.*来配置。

3.2.3 示例

我们将直接使用learning-reactive-nosql进行修改。

  • 修改依赖:

    implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
    

    修改为

    implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive'
    
  • application.yml中配置连接数据库:

    spring:
      data:
        mongodb:
          host: localhost
          port: 27017
          username: wisely
          password: zzzzzz
          database: first_db
    
  • 去除ReactiveEsConfig配置,Spring Boot已为MongoDB做好了所有的自动配置;

  • 领域模型:

    //...
    import org.springframework.data.mongodb.core.mapping.Document;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Document(collection = "person")
    public class Person {
        @Id
        private String id;
        private String name;
        private Integer age;
    
        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    }
    
  • Repository,此处使用ReactiveMongoRepository

    //...
    import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
    
    public interface PersonRepository extends ReactiveMongoRepository<Person, String> {
    }
    

其余的代码保持不变,我们执行的效果:
在这里插入图片描述

新书推荐:

我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html
在这里插入图片描述

主要包含目录有:

第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和批处理(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)
多谢大家支持。

猜你喜欢

转载自blog.csdn.net/wiselyman/article/details/107149803