Java之SpringCloud Alibaba【七】【Spring Cloud微服务网关Gateway组件】

一、网关简介

大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去用。
在这里插入图片描述
这样的架构,会存在着诸多的问题:

  • 每个业务都会需要鉴权、限流、权限校验、跨域等逻辑,如果每个业务都各自为战。自己造轮子实现一遍,会很蛋疼,完全可以抽出来,放到一个统一的地方去做。
  • 如果业务量比较简单的话,这种方式前期不会有什么问题,但随着业务越来越复杂,比如淘宝、亚马逊打开一个页面可能会涉及到数百个微服务协同工作,如果每一个微辰务都分配一个域名的话,一方面客户端代码会很难维护,涉及到数百个域名,另一方面是连接数的瓶颈想象一下你打开一个APP,通过抓包发现涉及到了数百个远程调用,这在移动端下会显得非常低效。
  • 后期如果需要对微服务进行重构的话,也会变的非常麻烦,需要客户端配合你一起进行改造,比如商品服务,随着业务变的越来越复杂,后期需要进行拆分成多个微服务这个时候对外提供的服务也需要拆分成多个,同时需要客户端配合你进行改造,非常蛋疼。

上面的这些问题可以借助API网关来解决。

在这里插入图片描述
所谓的API网关,就是指系统的统一入口,它封装了应用程序的内部结构,为客户说提供统一服务,一些与业务本身功能天关的公共逻辑可以在这里实现。诸如认证、鉴权、监控、路由转发等等,添加上API网关之后,系统的架构图变成了如下所示:
在这里插入图片描述
在这里插入图片描述

1、什么是Spring Cloud Gateway

网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。

Sping Cloud cGateway是Sping Clou官方推出的第二代网关框架,定位于取代NeificZul。

相比Zul来说,Spring Cloud Gateway提供更优秀的性能,更强大的有功能。

Spring Cloud Gateway是由WebFlux + Netty + Reactor实现的响应式的API网关。它不能在传统的servlet容器中工作,也不能构建成war包。

Sping Cloud Gateway旨在为微服务架构提供一种简单且有效的API路由的管理方式,并基于Fiter的方式提供网关的基本功能,例如说安全认证、监控、限流等等。
在这里插入图片描述官网文档: https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories

在这里插入图片描述
Spring Cloud Gateway 功能特征

  • 基于Spring Framework 5, Project Reactor和 Spring Boot 2.0进行构建;
  • 动态路由:能够匹配任何请求属性;
  • 支持路径重写;
  • 集成 Spring Cloud 服务发现功能(Nacos、Eruka) ;
  • 可集成流控降级功能(Sentinel、Hystrix) ;
  • 可以对路由指定易于编写的Predicate(断言)和Filter (过滤器);

2、核心概念

  • 路由(route)
    路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的URL和配置的路由匹配。

  • 断言(predicates)
    Java3中的断言函数,SpringCloud Gateway中的断言函数类型是Sping5.0框架中的SeverieExctange。断言函数允许开发者去定义匹酷t request中的任何信息,比加如请求头和参数等。

  • 过滤器(Filter)
    SpringCloud Gateway中的filter分为Gateway Filler和Global Filter。Filter可以对请求和响应进行处理

3、工作原理

Spring Cloud Gateway的工作原理跟Zuul的差不多,最大的区别就是Gateway的Filter只有pre和post 两种。
在这里插入图片描述
客户端向Spring Cloud Gateway发出请求,如果请求与网关程序定义的路由匹配,则该请求就会被发送到网关Web处理程序,此时处理程序运行特定的请求过滤器链。过滤器之间用虚线分开的原因是过滤器可能会在发送代理请求的前后执行逻辑。所有pre过滤器逻辑先执行,然后执行代理请求;代理请求完成后,执行post过滤器逻辑。

二、Spring Cloud Gateway快速开始

1、环境搭建【基本环境搭建-实现路由】

注意:会和spring-webmvc的依赖冲突,需要排除spring-webmvc
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

<dependencies><!--gateway的依赖 springcloud 开发--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency></dependencies>

在这里插入图片描述
在这里插入图片描述
设置配置文件
在这里插入图片描述

server:port: 8088
spring:application:name: api-gateway
# gateway的配置cloud:gateway:routes:- id: order_route #路由的唯一标识,路由到orderuri: http://localhost:8020 #需要转发的地址#断言规则 用于路由规则的匹配predicates:- Path=//# http://localhost:8088/order-serve/order/add  路由到↓# http://localhost:8020/order-serve/order/addfilters:- StripPrefix=1 # 转发之前,去掉第一次的路径# http://localhost:8020/order/add#- id: stock_route

在这里插入图片描述
访问:http://localhost:8088/order-serve/order/add
在这里插入图片描述

2、集成Nacos

<!-- nacos服务注册与发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

在这里插入图片描述

server:port: 8088
spring:application:name: api-gateway
# gateway的配置cloud:gateway:routes:- id: order_route #路由的唯一标识,路由到orderuri: lb://order-service # 需要转发的地址  lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略 order-service服务名#断言规则 用于路由规则的匹配predicates:- Path=/order-serve/**# http://localhost:8088/order-serve/order/add  路由到↓# http://localhost:8020/order-serve/order/addfilters:- StripPrefix=1 # 转发之前,去掉第一次的路径# http://localhost:8020/order/add#- id: stock_route# 配置Nacosnacos:discovery:server-addr: 127.0.0.1:8848username: nacospassword: nacos

在这里插入图片描述

重新运行并访问:
http://localhost:8088/order-service/order/add
在这里插入图片描述
设置约定集成nacos
在这里插入图片描述

server:port: 8088
spring:application:name: api-gatewaycloud:# gateway的配置gateway:discovery:locator:enabled: true  #是否启动自动识别nacos服务#配置Nacosnacos:discovery:server-addr: 127.0.0.1:8848username: nacospassword: nacos

重新启动项目
访问服务名对应的地址:http://localhost:8088/order-service/order/add

在这里插入图片描述
重新启动项目
访问:http://localhost:8088/order/add

在这里插入图片描述
调整时间
在这里插入图片描述
重新运行项目
在这里插入图片描述

http://localhost:8088/order/add

在这里插入图片描述

3、路由断言工厂(Route Predicate Factories)配置

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories

作用:当请求gateway的时候, 使用断言对请求进行匹配, 如果匹配成功就路由转发,如果匹配失败就返回404

类型:内置,自定义

SpringCloud Gateway包括许多内置的断言工厂,所有这些断言都与HTTP请求的不同属性匹配。具体如下:

  • 基于Datetime类型的断工厂

此类型的断言根据时间做判断,主要有三个:
AfterRoutePredicateFactory:接收一个日期参数, 判断请求日期是否晚于指定日期
BeforeRoutePredicateFactory:接收- 个日期参数,判断请求日期是否早于指定日期
BetweenRoutePredicateFactory:接收两个日期参数,判断请求日期是否在指定时间段内

- After=2023-10-19T09:07:00.660+08:00[Asia/Shanghai]

在这里插入图片描述

  • 基于远程地址的断言工厂
    RemoteAddrRoutePredicateFactory:接收一个IP地址段,判断请求主机地址是否在地址段中
- RemoteAddr=192.168.1.1/24
  • 基于Cookie的断言工厂
    CookieRoutePredicateFactory:接收两个参数, cookie 名字和一个正则表达式。判断请求cookie是否具有给定名称且值与正则表达式匹配。
-Cookie=chocolate, ch.
  • 基于Header的断言工厂

HeaderRoutePredicateFactory:接收两个参数,标题名称和正则表达式。判断请求Header是否具有给定名称且值与正则表达式匹配。

- Header=X-Request-Id, \d+

在这里插入图片描述

重新启动项目
利用API工具发送请求
在这里插入图片描述
把Headers当中的请求参数取消重新发起请求,会报错
在这里插入图片描述

  • 基于Host的断言工厂

HostRoutePredicateFactory:接收一个参数, 主机名模式。判断请求的Host是否满足匹配规则。

-Host=**.testhost.org
  • 基于Method请求方法的断言工厂

MethodRoutePredicateFactory:接收一个参数, 判断请求类型是否跟指定的类型匹配。
在这里插入图片描述
重新启动测试
通过GET发送请求
在这里插入图片描述
通过POST发起请求
在这里插入图片描述

  • 基于Query请求参数的断言工厂
    在这里插入图片描述
    设置必须传递参数为name的参数
- Query=name

重新启动发起请求,没有设置name参数报错
在这里插入图片描述
设置name参数
在这里插入图片描述
设置指定参数
在这里插入图片描述

 - Query=name,xushu|zhuge

设置name的参数只能是xushu或者zhuge否则断言失败
发送请求报错
在这里插入图片描述
将参数改为xushu请求成功,改为zhuge也请求成功
在这里插入图片描述

  • 基于路由权重的断言工厂

WeightRoutePredicateFactory:接收-个[组名 权重],然后对于同-一个组内的路由按照权重转发

routes:-id: weight_ route1uri: host1predicates:-Path=/ product/**-Weight=group3,1-id: weight_ route2uri: host2predicates:- Path=/ product/**-Weight= group3, 9

4、自定义路由断言工厂

自定义路由断言工厂需要继承AbstractRoutePredicateFactory类,重写apply方法的逻辑。

在apply方法中可以通过exchange. getRequest()倒ServerHttpRequest对象,从而可以获取到请求的参数、请求方式、请求头等信息。

1、必须是Spring组件bean
2、类必须加上RoutePredicateFactory作为结尾
3、必须继承AbstractRoutePredicateFactory
4、必须声明静态的内部类 声明属性来接受配置文件当中配置的断言信息
5、需要结合shortcutFieldOrder进行绑定
6、通过apply方法进行逻辑判断 true 就是匹配成功 false就是匹配失败

注意:命名需要以RoutePredicateFactory结尾
在这里插入图片描述
在这里插入图片描述


@Component
public class CheckAuthRoutePredicateFactoryextends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.Config> {public CheckAuthRoutePredicateFactory() {super(CheckAuthRoutePredicateFactory.Config.class);}@Overridepublic List<String> shortcutFieldOrder() {return Arrays.asList("name");}@Overridepublic Predicate<ServerWebExchange> apply(CheckAuthRoutePredicateFactory.Config config) {return new GatewayPredicate() {@Overridepublic boolean test(ServerWebExchange exchange) {if(config.getName().equals("xushu")){return true;}return false;}};}// 用于接收配置文件中 断言的信息@Validatedpublic static class Config {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}}

在这里插入图片描述

重新启动项目
在这里插入图片描述
访问:http://localhost:8088/order/add
在这里插入图片描述
修改对应的断言名称
在这里插入图片描述

查询启动
http://localhost:8088/order/add
在这里插入图片描述

5、过滤器工厂( GatewayFilter Factories)配置

在这里插入图片描述
https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayilter-factories

在这里插入图片描述

在这里插入图片描述

5.1、添加请求头参数

在这里插入图片描述

          filters:- AddRequestHeader=X-Request-color,red

在这里插入图片描述

    @RequestMapping("/header")public String header(@RequestHeader("X-Request-color") String color){return color;}

在这里插入图片描述
重新启动两个项目

http://localhost:8088/order/header
在这里插入图片描述

5.2、添加请求参数

在这里插入图片描述

- AddRequestParameter=color,blue

在这里插入图片描述

  @RequestMapping("/parameter")public String parameter(@RequestParam("color") String color){return color;}

http://localhost:8088/order/parameter
在这里插入图片描述

5.3、为匹配的路由统一添加前缀

在这里插入图片描述

  servlet:context-path: /mall-order

在这里插入图片描述

            - PrefixPath=/mall-order #添加前缀对应微服务需要配置context-path

重新启动两个项目
在这里插入图片描述
访问:http://localhost:8088/order/add
在这里插入图片描述
现在访问:http://localhost:8020/mall-order/order/add
在这里插入图片描述
然而访问8082必须携带前缀
http://localhost:8020/mall-order/order/add
在这里插入图片描述

5.4、配置重定向

在这里插入图片描述

- RedirectTo=302, https://www.baidu.com

在这里插入图片描述
访问:http://localhost:8088/order/add
重定向到了百度
在这里插入图片描述

5.5、自定义状态码

在这里插入图片描述

- SetStatus= 404

在这里插入图片描述
访问:http://localhost:8088/order/add
虽然访问成功了,但是返回的状态码为404
在这里插入图片描述

6、自定义过滤器工厂

继承AbstractNameValueGatewayFilterFactory且我们的自定义名称必须要以GatewayFilterFactory结尾并交给spring管理。
创建CheckAuthGatewayFilterFactory
在这里插入图片描述


/****/
@Component
public class CheckAuthGatewayFilterFactoryextends AbstractGatewayFilterFactory<CheckAuthGatewayFilterFactory.Config> {public CheckAuthGatewayFilterFactory() {super(Config.class);}@Overridepublic List<String> shortcutFieldOrder() {return Arrays.asList("value");}@Overridepublic GatewayFilter apply(Config config) {return new GatewayFilter() {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String name=exchange.getRequest().getQueryParams().getFirst("name");if(StringUtils.isNotBlank(name)){if(config.getValue().equals(name)){return chain.filter(exchange);}else {// 返回404exchange.getResponse().setStatusCode(HttpStatus.NOT_FOUND);return exchange.getResponse().setComplete();}}// 正常请求return chain.filter(exchange);}};}public static class Config {private String value;public String getValue() {return value;}public void setValue(String value) {this.value = value;}}}

在这里插入图片描述

            - CheckAuth=xushu

7、全局过滤器(Global Filters)

在这里插入图片描述
局部过滤器和全局过滤器的区别

局部:针对某个路由,需要在路由中进行配置
全局:针对所有路由请求,一旦定义就会投入使用

GlobalFilter接口和GatewayFilter有一样的接口定义, 只不过,GlobalFilter 会作用于所有路由。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@Component
public class LogFilter implements GlobalFilter {Logger log= LoggerFactory.getLogger(this.getClass());@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info(exchange.getRequest().getPath().value());return chain.filter(exchange);}
}

重新启动:http://localhost:8088/order/add?name=xushu

在这里插入图片描述
在这里插入图片描述

8、Reactor Netty访问日志

要启用Reactor Netty访问日志,请设置

-Dreactor.netty.http.server.accessLogEnabled=true

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

它必须是Java系统属性,而不是Spring Boot属性。

您可以将日志记录系统配置为具有单独的访问日志文件。以下示例创建一个Logback配置:

<appender name=" accessLog" class="ch.qos.logback.core.FileAppender"><file>access_log.log</file><encoder><pattern>%msg%n</pattern></encoder>
</appender><appender name=" async" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="accessLog" />
</appender><logger name="reactor.netty.http.server.AccessLog" level="INFO" additivity="false"><appender-ref ref=" async"/>
</logger>
8.1、Gateway跨域配置(CORS Configuration)

通过ym|配置的方式
https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#cors-configuration

在这里插入图片描述

      globalcors:cors-configurations:'[/**]': # 允许跨域访问的资源allowedOrigins: "*" #跨域允许的来源 例如:www.smsm.comallowedMethods:- GET- POST- PUT

模拟跨域请求,设置发起请求的页面
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body><div ><table border="1"><thead><tr><th>id</th><th>username</th><th>age</th></tr></thead><tbody id="userlist"></tbody></table></div><input type="button" value="用户列表" onclick="getData()"><script>function getData() {$.get('http://localhost:8088/order/add',function(data){alert(data)});}</script>
</body>
</html>

在这里插入图片描述
访问网页
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

            allowedOrigins: "localhost:8088" #跨域允许的来源 例如:www.smsm.com

在这里插入图片描述
再次访问访问网页(抛出跨域异常)
在这里插入图片描述
设置*运行所有的来源访问
在这里插入图片描述
Spring自带的跨域方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


@Configuration
public class CorsConfig {@Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.addAllowedMethod("*");   //允许运行methodconfig.addAllowedOrigin("*");   //允许的来源config.addAllowedHeader("*");   //允许的请求头参数// 允许访问的资源UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());source.registerCorsConfiguration("/**",config);return new CorsWebFilter(source);}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/180394.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot框架使用AOP + 自定义注解实现请求日志记录

一、SpringBoot记录日志 文章目录 一、SpringBoot记录日志1.1、环境搭建1.2、配置FastJson1.3、自定义LogRecord注解1.4、定义日志实体类1.5、创建HttpRequestUtil工具类1.6、定义AOP切面1.7、编写测试类1.8、运行测试 1.1、环境搭建 搭建SpringBoot工程。引入【spring-boot-st…

K8S的pod创建过程

创建流程图 用户发起请求创建deployment&#xff1b;apiserver收到创建资源的请求&#xff0c;apiserver对客户端操作进行身份认证&#xff0c;认证完成后接受该请求&#xff0c;并把相关的信息保存到etcd中&#xff0c;然后返回确认信息给客户端&#xff1b;apiserver向etcd…

【JVM】双亲委派机制、打破双亲委派机制

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JVM 一、双亲委派机制1.1 双亲委派的作用1.…

Excel文档名称批量翻译的高效方法

在处理大量文件时&#xff0c;我们常常需要借助一些工具来提高工作效率。例如&#xff0c;在需要对Excel文档名称进行批量翻译时&#xff0c;一个方便快捷的工具可以帮助我们省去很多麻烦。今天&#xff0c;我将介绍一款名为固乔文件管家的软件&#xff0c;它能够帮助我们轻松实…

基于java+springboot+vue在线选课系统

项目介绍 本系统结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算机各种优势的情况下&#xff0c;采用JAVA语言&#xff0c;结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。员工管理系统主要包括个人中心、课程管理、专业管理、院系信息管理、学生…

TrafficWatch 数据包嗅探器工具

TrafficWatch 是一种数据包嗅探器工具&#xff0c;允许您监视和分析 PCAP 文件中的网络流量。它提供了对各种网络协议的深入了解&#xff0c;并可以帮助进行网络故障排除、安全分析等。 针对 ARP、ICMP、TCP、UDP、DNS、DHCP、HTTP、SNMP、LLMNR 和 NetBIOS 的特定于协议的数据…

【Unity实战】最全面的库存系统(五)

文章目录 先来看看最终效果前言配置商店系统数据创建另一个NPC绘制商店UI控制商店开关列出商品添加和删除物品功能添加商品到购物车购买商品购物车删除物品商店预览效果购买和出售切换出售功能保存商店数据快捷栏物品切换和使用完结 先来看看最终效果 前言 本期也是最好一期&a…

直播间讨论区需要WebSocket,简单了解下

由于 http 存在一个明显的弊端&#xff08;消息只能有客户端推送到服务器端&#xff0c;而服务器端不能主动推送到客户端&#xff09;&#xff0c;导致如果服务器如果有连续的变化&#xff0c;这时只能使用轮询&#xff0c;而轮询效率过低&#xff0c;并不适合。于是 WebSocket…

Git 案例(企业如何使用git开发项目)

一、企业中我们是如何开发 1) 入职第一天,管理人员分配/git账号密码 2) 开发人员下载代码即文档/ 根据文档将环境搭建成功 3) 团队一般会给你讲讲项目相关的支持 4) 你接到第一个需求(或者某个功能,一般要经过沟通,分析,设计...等过程) 5) 创建feature分支(一般一个需求对应…

FPGA高端项目:图像采集+GTP+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持

目录 1、前言免责声明本项目特点 2、相关方案推荐我这里已有的 GT 高速接口解决方案我这里已有的以太网方案 3、设计思路框架设计框图视频源选择OV5640摄像头配置及采集动态彩条视频数据组包GTP 全网最细解读GTP 基本结构GTP 发送和接收处理流程GTP 的参考时钟GTP 发送接口GTP …

【PyQt学习篇 · ⑪】:QPushButton和QCommandLinkButton的使用

文章目录 构造函数菜单设置扁平化默认处理右键菜单QCommandLinkButton的使用 构造函数 QPushButton的构造函数如下&#xff1a; """QPushButton(parent: Optional[QWidget] None)QPushButton(text: Optional[str], parent: Optional[QWidget] None)QPushButt…

自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目

自定义的卷积神经网络模型CNN&#xff0c;对图片进行分类并使用图片进行测试模型-适合入门&#xff0c;从模型到训练再到测试&#xff1a;开源项目 开源项目完整代码及基础教程&#xff1a; https://mbd.pub/o/bread/ZZWclp5x CNN模型&#xff1a; 1.导入必要的库和模块&…

进阶C语言-指针的进阶(三)

模拟实现qsort函数 &#x1f388;1.测试bubble_sort&#xff0c;排序整型数组&#x1f388;2测试bubble_sort&#xff0c;排序结构体数组 &#x1f4dd;关于qsort函数&#xff0c;我们可以先去cpluplus网站上面了解一下&#xff1a; //1.排序整型数组&#xff0c;两个整型可以…

玻色量子“天工量子大脑”亮相中关村论坛,大放异彩

2023年5月25日至30日&#xff0c;2023中关村论坛&#xff08;科博会&#xff09;在北京盛大召开。中关村论坛&#xff08;科博会&#xff09;是面向全球科技创新交流合作的国家级平台行业盛会&#xff0c;由科技部、国家发展改革委、工业和信息化部、国务院国资委、中国科学院、…

使用Selenium IDE录制脚本

今天&#xff0c;我们开始介绍基于开源Selenium工具的Web网站自动化测试。 Selenium包含了3大组件&#xff0c;分别为&#xff1a;1. Selenium IDE 基于Chrome和Firefox扩展的集成开发环境&#xff0c;可以录制、回放和导出不同语言的测试脚本。 2. WebDriver 包括一组为不同…

项目实战:展示第一页数据

1、在FruitDao接口中添加查询第一页数据和查询总记录条数 package com.csdn.fruit.dao; import com.csdn.fruit.pojo.Fruit; import java.util.List; //dao &#xff1a;Data Access Object 数据访问对象 //接口设计 public interface FruitDao {void addFruit(Fruit fruit);vo…

Redis的介绍,以及Redis的安装(本机windows版,虚拟机Linux版)和Redis常用命令的介绍

目录 一. Redis简介 二. Redis的安装 2.1 Linux版安装 2.2 windows版安装 三. Redis的常用命令 一. Redis简介 Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列代理。 它…

【ES专题】ElasticSearch搜索进阶

目录 前言阅读导航前置知识特别提醒笔记正文一、分词器详解1.1 基本概念1.2 分词发生的时期1.3 分词器的组成1.3.1 切词器&#xff1a;Tokenizer1.3.2 词项过滤器&#xff1a;Token Filter1.3.3 字符过滤器&#xff1a;Character Filter 1.4 倒排索引的数据结构 <font color…

管理文件:文件批量重命名,轻松删除文件名中的空格

在文件管理中&#xff0c;我们经常会遇到文件名中带有空格的情况。这些空格可能会使文件在某些情况下难以被正确识别或使用&#xff0c;因此我们需要掌握一些技巧来轻松删除文件名中的空格。现在使用云炫文件管理器批量重命名进行批量处理。以下是如何操作的步骤详解&#xff1…

网易按照作者批量采集新闻资讯软件说明文档

大家好&#xff0c;我是淘小白~ 今天给大家介绍的爬虫软件是网易按照作者采集的软件 1、软件语言&#xff1a; Python 2、使用到的工具 Python selenium库、谷歌浏览器、谷歌浏览器驱动 3、文件说明&#xff1a; 4、配置文件说明&#xff1a; 5、环境配置 安装Python&am…