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

相关推荐
zxrhhm19 分钟前
PostgreSQL 大规模随机数据生成完整指南
大数据·数据库·postgresql
飞飞传输39 分钟前
数字化科研提速关键 构建安全可控一体化跨网数据传输体系
大数据·运维·安全
Elastic 中国社区官方博客1 小时前
Elastic 的 AI agent skills
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
陕西字符1 小时前
2026 西安小微企业地图与 AI 问答排名优化:专业技术指南与落地方案
大数据·人工智能
阿里云大数据AI技术1 小时前
破解 AI 搜索“效果与成本”双重困境:阿里云 Elasticsearch 向量混合检索最佳实践揭秘
人工智能·elasticsearch
MetrixAeroCore1 小时前
车规级国际物联卡是什么?车载物联网硬件选型与行业标准解析
大数据·物联网
189228048611 小时前
H27QCG8T2ELR-BCF海力士H27QCG8UDBIR-BCB
大数据·服务器·人工智能·科技·缓存
财经资讯数据_灵砚智能2 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年5月10日
大数据·人工智能·python·信息可视化·自然语言处理
lizhihai_992 小时前
股市学习心得-智能体顶层设计文件收益供应链
大数据·人工智能·学习
AI先驱体验官2 小时前
臻灵短剧平台 · 用户操作手册
大数据·人工智能·深度学习·重构·aigc