ElasticSearch集成webFlux响应式开发

目录

前言

1.Weflux特点:

2.WebFlux简单集成ElasticSearch

[2.1 引入基本依赖模块](#2.1 引入基本依赖模块)

3.application.yml文件的配置

4.定义Product实体类

5.定义ElasticSearch的数据访问层接口

6.定义Controller

7.启动SpringBoot程序,用postman进行接口测试


前言

WebFlux响应式开发是Spring Framework 5中引入的一个重要组件,它是Spring用于支持响应式编程的组件,提供了非阻塞,异步的Web框架。

1.Weflux特点:

非阻塞、异步、响应式流、函数式编程、高性能和高并发

1.1 非阻塞与传统的阻塞IO相比,在性能方面提升了千百倍

1.2 异步大大减少了因同步网络拥堵带来相应时间。

1.3 响应流:作为webflux的规范,提供异步流处理的接口和行为,允许开发者以声明式的方式处理数据流,同时保持了流的控制和背压管理。

1.4函数式编程:采用函数式编程规范,灵活利用lamda表达式简化编程模式,大大提高了代码的可读性和易用性。

1.5高并发和高性能:由于其本身的异步相应特点,WebFlux能够同时处理大量的并发请求,提高系统的吞吐量和响应时间,这使得其在分布式微服务架构中具有高并发和高可用的性能。

2.WebFlux简单集成ElasticSearch

2.1 引入基本依赖模块

java 复制代码
//SpingBoot的版本
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
     </dependency>
//elasticSearch依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

3.application.yml文件的配置

java 复制代码
spring:
  elasticsearch:
    jest:
      uris: http://localhost:9200

4.定义Product实体类

java 复制代码
package com.example.spring.mono.entity;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;

/**
 * 产品
 */
@Data
@TypeAlias("product")
@Document(indexName = "product")
public class Product {
    //产品id
    @Id
    private String productId;
    //产品名称
    @Field(type = FieldType.Keyword)
    private String productName;
    //创建时间
    private Date createTime;
    //更新时间
    private Date updateTime;
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String description;

}

5.定义ElasticSearch的数据访问层接口

java 复制代码
public interface ProductRepository  extends ReactiveSortingRepository<Product, String> {


}

6.定义Controller

java 复制代码
package com.example.spring.mono.controller;

import com.example.spring.mono.entity.Product;
import com.example.spring.mono.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.Date;
import java.util.Map;

@RestController
@RequestMapping("/product")
public class ProductController {

    @Autowired
    private ProductRepository productRepository;
  @PostMapping("/saveProduct")
    public Mono<Product>save(@RequestBody Product product){
      product.setCreateTime(new Date());
     return productRepository.save(product);
  }

  @GetMapping("/list")
  public Flux<Product> list(){

      return productRepository.findAll();
  }



}

7.启动SpringBoot程序,用postman进行接口测试

相关推荐
zskj_qcxjqr5 小时前
七彩喜艾灸机器人:当千年中医智慧遇上现代科技
大数据·人工智能·科技·机器人
洛克大航海9 小时前
Ubuntu安装Hbase
大数据·linux·数据库·ubuntu·hbase
橘子在努力9 小时前
【橘子ES】如何本地调试ES源码
elasticsearch·搜索引擎
GIOTTO情10 小时前
媒介宣发的技术革命:Infoseek如何用AI重构企业传播全链路
大数据·人工智能·重构
测试开发Kevin10 小时前
详解Jenkins 的 Declarative Pipeline中post 语法
jenkins·devops
ApacheSeaTunnel10 小时前
新兴数据湖仓手册·从分层架构到数据湖仓架构(2025):数据仓库分层的概念与设计
大数据·数据仓库·开源·数据湖·dataops·白鲸开源·底层技术
落雪财神意11 小时前
股指10月想法
大数据·人工智能·金融·区块链·期股
柳贯一(逆流河版)11 小时前
ElasticSearch 实战:全文检索与数据聚合分析的完整指南
大数据·elasticsearch·全文检索
白鲸开源11 小时前
最佳实践:基于Apache SeaTunnel从MySQL同步到PostgreSQL
大数据·mysql·postgresql
QYResearch11 小时前
2025年全球移动变电站市场占有率及行业竞争格局分析报告
大数据