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进行接口测试

相关推荐
武子康6 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
阿里云大数据AI技术6 小时前
2025云栖大会·大数据AI参会攻略请查收!
大数据·人工智能
云偶8 小时前
从零搭建 Jenkins Android 自动发包体系
jenkins
代码匠心9 小时前
从零开始学Flink:数据源
java·大数据·后端·flink
Lx35211 小时前
复杂MapReduce作业设计:多阶段处理的最佳实践
大数据·hadoop
MacroZheng14 小时前
横空出世!MyBatis-Plus 同款 ES ORM 框架,用起来够优雅!
java·后端·elasticsearch
武子康14 小时前
大数据-100 Spark DStream 转换操作全面总结:map、reduceByKey 到 transform 的实战案例
大数据·后端·spark
expect7g15 小时前
Flink KeySelector
大数据·后端·flink
阿里云大数据AI技术1 天前
StarRocks 助力数禾科技构建实时数仓:从数据孤岛到智能决策
大数据
libraG1 天前
Jenkins打包问题
前端·npm·jenkins