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

相关推荐
samLi06201 小时前
【工具变量】全国省市区县土地出让结果公告数据(2000-2024年)
大数据
chevysky.cn4 小时前
Elasticsearch部署和集成
大数据·elasticsearch·jenkins
SelectDB技术团队5 小时前
森马服饰从 Elasticsearch 到阿里云 SelectDB 的架构演进之路
elasticsearch·阿里云·doris
青云交5 小时前
Java 大视界 -- Java 大数据在智能医疗远程手术机器人操作数据记录与分析中的应用(342)
java·大数据·数据记录·远程手术机器人·基层医疗·跨院协作·弱网络适配
Elasticsearch5 小时前
Elastic 被评为 2025 年 Gartner® 可观测平台魔力象限™中的领导者
elasticsearch
武子康6 小时前
大数据-38 Redis 分布式缓存 详细介绍 缓存、读写、旁路、穿透模式
大数据·redis·后端
Elasticsearch6 小时前
上下文更长 ≠ 更好:为什么 RAG 仍然重要
elasticsearch
时序数据说6 小时前
时序数据库的存储之道:从数据特性看技术要点
大数据·数据库·物联网·开源·时序数据库·iotdb