当前位置: 首页 > news >正文

Spring Cloud Gateway集成Knife4j

1、前提

网关路由能够正常工作。
案例 基于 Spring Cloud Gateway +Nacos 实现动态路由拓展的参考地址:Spring Cloud Gateway + Nacos 实现动态路由
详细官网案例:https://doc.xiaominfo.com/docs/middleware-sources/spring-cloud-gateway/spring-gateway-introduction

2、聚合接口文档页面

在这里插入图片描述

3、项目结构

gateway-service:网关、文档聚合中心,是所有微服务文档的出口
auth-service:认证服务
user-service:用户服务

4、项目配置

4.1 gateway-service

4.1.1 maven 依赖
主要依赖
		<!-- Api文档 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>4.3.0</version></dependency>
4.1.2 bootstrap.yml配置
# knife4j 网关聚合  https://doc.xiaominfo.com/docs/middleware-sources/spring-cloud-gateway/spring-gateway-introduction
knife4j:gateway:# 第一个配置,开启gateway聚合组件enabled: true# 第二行配置,设置聚合模式采用discover服务发现的模式strategy: discover# 服务发现模式的配置discover:# 第三行配置,开启discover模式enabled: true# 聚合所有子服务(swagger2规范),子服务是3规范则替换为openapi3version: openapi3# 需要排除的微服务(eg:网关服务) excluded-services:- gateway-service

4.2 auth-service

4.2.1 maven 依赖
主要依赖
 	<!-- 接口文档 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.3.0</version></dependency>
案件差不多完整主要依赖
<!--Spring boot 依赖(微服务基础)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><!--使用exclusions标签来标明要排除的包--><!--排除logback--><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!--Web 服务相关--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 生成配置元数据,比如你平常在yml文件里面配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--单元测试依赖,子工程中需要单元测试时,不需要再次引入此依赖了--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!--bootstrap 相关--><!--SpringBoot2.4.x之后默认不加载bootstrap.yml文件,需要在pom里加上依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>4.0.0</version></dependency><!--服务的注册和发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--lombok 依赖,子工程中假如需要lombok,不需要再引入--><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope></dependency><!-- 接口文档 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.3.0</version></dependency>
4.2.2 bootstrap.yml配置
server:port: 2tomcat:max-http-form-post-size: -1max-threads: 500min-spare-threads: 50servlet:context-path: /
spring:main:web-application-type: reactive#当遇到同样名字的时候,是否允许覆盖注册allow-bean-definition-overriding: true profiles:active: ${SYS_ENV:} # local:本地,dev:测试,uat:uatapplication:name: auth-servicecloud:nacos:# 配置中心#config:username: ${NACOS_USER:nacos}password: ${NACOS_PASSWORD:nacos}server-addr: ${NACOS_IP:nacos.com}:${NACOS_POST:8848}namespace: ${NACOS_NAMESPACE:}file-extension: ymlrefresh-enabled: trueoverride-none: true  #本地配置优先shared-configs:- application.${spring.cloud.nacos.config.file-extension} # 配置文件名-Data Id# 安全配置security:# 验签公钥地址oauth2:authorizationserver:token-uri: 获取密钥地址(后续根据账号、密码获取token)# swagger配置
knife4j:# 开启增强配置 enable: true# 开启生产环境屏蔽# production: truesetting:language: zh_cn# 账户密码basic:enable: trueusername: abcpassword: abc# Api文档信息
# springdoc-openapi 项目配置
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'default'paths-to-match: '/**'info:title: ${spring.application.name} - APIversion: 3.0.0description: 接口文档contact:name: 1url: 1email: 1license:name: Apache 2.0url: https://www.apache.org/licenses/LICENSE-2.0.html
4.2.3 接口文档配置
4.2.3.1 ApiDocInfo.java
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** API 信息属性** @since 2023/12/13*/
@Data
@ConfigurationProperties(prefix = "springdoc.info")
public class ApiDocInfo {/*** API文档标题*/private String title;/*** API文档版本*/private String version;/*** API文档描述*/private String description;/*** 联系人信息*/private Contact contact;/*** 许可证信息*/private License license;@Datapublic static class Contact {/*** 联系人姓名*/private String name;/*** 联系人主页*/private String url;/*** 联系人邮箱*/private String email;}/*** 许可证信息*/@Datapublic static  class  License{/*** 许可证名称*/private String name;/*** 许可证URL*/private String url;}}
4.2.3.2 ApiDocInfo.java
package com.fkxinli.zxyy.config.api;import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.OAuthFlow;
import io.swagger.v3.oas.models.security.OAuthFlows;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;/*** OpenAPI 配置类* <p>* 基于 OpenAPI 3.0 规范 + SpringDoc 实现 + knife4j 增强** @author gyd* @since 3.0.0*/
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(ApiDocInfo.class)
public class OpenApiConfig {/*** OAuth2 认证 endpoint*/@Value("${spring.security.oauth2.authorizationserver.token-uri}")private String tokenUrl;/*** API 文档信息属性*/private final ApiDocInfo apiDocInfo;/*** OpenAPI 配置(元信息、安全协议)*/@Beanpublic OpenAPI apiInfo() {return new OpenAPI().components(new Components().addSecuritySchemes(HttpHeaders.AUTHORIZATION,new SecurityScheme()// OAuth2 授权模式.type(SecurityScheme.Type.OAUTH2).name(HttpHeaders.AUTHORIZATION).flows(new OAuthFlows().password(new OAuthFlow().tokenUrl(tokenUrl).refreshUrl(tokenUrl)))// 安全模式使用Bearer令牌(即JWT).in(SecurityScheme.In.HEADER).scheme("Bearer").bearerFormat("JWT")))// 接口全局添加 Authorization 参数.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION))// 接口文档信息(不重要).info(new Info().title(apiDocInfo.getTitle()).version(apiDocInfo.getVersion()).description(apiDocInfo.getDescription()).contact(new Contact().name(apiDocInfo.getContact().getName()).url(apiDocInfo.getContact().getUrl()).email(apiDocInfo.getContact().getEmail())).license(new License().name(apiDocInfo.getLicense().getName()).url(apiDocInfo.getLicense().getUrl())));}}

4.3 user-service

4.2.1 maven 依赖
主要依赖
 	<!-- 接口文档 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.3.0</version></dependency>
案件差不多完整主要依赖
<!--Spring boot 依赖(微服务基础)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><!--使用exclusions标签来标明要排除的包--><!--排除logback--><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!--Web 服务相关--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 生成配置元数据,比如你平常在yml文件里面配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--单元测试依赖,子工程中需要单元测试时,不需要再次引入此依赖了--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!--bootstrap 相关--><!--SpringBoot2.4.x之后默认不加载bootstrap.yml文件,需要在pom里加上依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>4.0.0</version></dependency><!--服务的注册和发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--lombok 依赖,子工程中假如需要lombok,不需要再引入--><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope></dependency><!-- 接口文档 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.3.0</version></dependency>
4.2.2 bootstrap.yml配置
server:port: 2tomcat:max-http-form-post-size: -1max-threads: 500min-spare-threads: 50servlet:context-path: /
spring:main:web-application-type: reactive#当遇到同样名字的时候,是否允许覆盖注册allow-bean-definition-overriding: true profiles:active: ${SYS_ENV:} # local:本地,dev:测试,uat:uatapplication:name: user-servicecloud:nacos:# 配置中心#config:username: ${NACOS_USER:nacos}password: ${NACOS_PASSWORD:nacos}server-addr: ${NACOS_IP:nacos.com}:${NACOS_POST:8848}namespace: ${NACOS_NAMESPACE:}file-extension: ymlrefresh-enabled: trueoverride-none: true  #本地配置优先shared-configs:- application.${spring.cloud.nacos.config.file-extension} # 配置文件名-Data Id# 安全配置security:# 验签公钥地址oauth2:authorizationserver:token-uri: 获取密钥地址(后续根据账号、密码获取token)# swagger配置
knife4j:# 开启增强配置 enable: true# 开启生产环境屏蔽# production: truesetting:language: zh_cn# 账户密码basic:enable: trueusername: abcpassword: abc# Api文档信息
# springdoc-openapi 项目配置
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'default'paths-to-match: '/**'info:title: ${spring.application.name} - APIversion: 3.0.0description: 接口文档contact:name: 1url: 1email: 1license:name: Apache 2.0url: https://www.apache.org/licenses/LICENSE-2.0.html
4.2.3 接口文档配置
4.2.3.1 ApiDocInfo.java
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** API 信息属性** @since 2023/12/13*/
@Data
@ConfigurationProperties(prefix = "springdoc.info")
public class ApiDocInfo {/*** API文档标题*/private String title;/*** API文档版本*/private String version;/*** API文档描述*/private String description;/*** 联系人信息*/private Contact contact;/*** 许可证信息*/private License license;@Datapublic static class Contact {/*** 联系人姓名*/private String name;/*** 联系人主页*/private String url;/*** 联系人邮箱*/private String email;}/*** 许可证信息*/@Datapublic static  class  License{/*** 许可证名称*/private String name;/*** 许可证URL*/private String url;}}
4.2.3.2 ApiDocInfo.java
package com.fkxinli.zxyy.config.api;import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.OAuthFlow;
import io.swagger.v3.oas.models.security.OAuthFlows;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;/*** OpenAPI 配置类* <p>* 基于 OpenAPI 3.0 规范 + SpringDoc 实现 + knife4j 增强** @author gyd* @since 3.0.0*/
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(ApiDocInfo.class)
public class OpenApiConfig {/*** OAuth2 认证 endpoint*/@Value("${spring.security.oauth2.authorizationserver.token-uri}")private String tokenUrl;/*** API 文档信息属性*/private final ApiDocInfo apiDocInfo;/*** OpenAPI 配置(元信息、安全协议)*/@Beanpublic OpenAPI apiInfo() {return new OpenAPI().components(new Components().addSecuritySchemes(HttpHeaders.AUTHORIZATION,new SecurityScheme()// OAuth2 授权模式.type(SecurityScheme.Type.OAUTH2).name(HttpHeaders.AUTHORIZATION).flows(new OAuthFlows().password(new OAuthFlow().tokenUrl(tokenUrl).refreshUrl(tokenUrl)))// 安全模式使用Bearer令牌(即JWT).in(SecurityScheme.In.HEADER).scheme("Bearer").bearerFormat("JWT")))// 接口全局添加 Authorization 参数.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION))// 接口文档信息(不重要).info(new Info().title(apiDocInfo.getTitle()).version(apiDocInfo.getVersion()).description(apiDocInfo.getDescription()).contact(new Contact().name(apiDocInfo.getContact().getName()).url(apiDocInfo.getContact().getUrl()).email(apiDocInfo.getContact().getEmail())).license(new License().name(apiDocInfo.getLicense().getName()).url(apiDocInfo.getLicense().getUrl())));}}

5、测试

启动所有服务后,访问地址:http://{gateway.host}:{gateway.port}/doc.html
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

相关文章:

Spring Cloud Gateway集成Knife4j

1、前提 网关路由能够正常工作。 案例 基于 Spring Cloud Gateway Nacos 实现动态路由拓展的参考地址&#xff1a;Spring Cloud Gateway Nacos 实现动态路由 详细官网案例&#xff1a;https://doc.xiaominfo.com/docs/middleware-sources/spring-cloud-gateway/spring-gatewa…...

Hive10_窗口函数

窗口函数&#xff08;开窗函数&#xff09; 1 相关函数说明 普通的聚合函数聚合的行集是组,开窗函数聚合的行集是窗口。因此,普通的聚合函数每组(Group by)只返回一个值&#xff0c;而开窗函数则可为窗口中的每行都返回一个值。简单理解&#xff0c;就是对查询的结果多出一列…...

ipvsadm命令详解

ipvsadm命令详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨一个在Linux系统网络管理中极具威力的命令——ipvsadm&#xff0c;通过详细解析…...

zabbix通过自动发现-配置监控项、触发器(小白教程)

自动发现配置参考链接&#xff08;不小白&#xff0c;不友好&#xff09; zabbix-get介绍 1配置 zabbix server&#xff1a;版本7&#xff08;不影响&#xff09;,IP地址&#xff1a;192.168.0.60zabbix agent&#xff1a;版本agent1&#xff08;不影响&#xff09;&#xff…...

Dockerfile文件介绍

0 Preface/Foreword 0.1 Docker docker用来自制镜像。 1 Introduction 1.1 Dockerfile Dockerfile是用于定义Docker镜像的构建过程&#xff0c;它包含一系列的指令用于安装 软件包、配置环境等操作。 Dockerfile文件的格式如下&#xff1a; FROM base_image RUN apt-get up…...

【PHP】函数array_reduce()使用场景

目录 1.计算数组中所有元素的和 2.计算数组中所有元素的乘积 3.将多个字符串连接在一起 4.对数组中的元素进行逻辑计算 5.取出第一个满足条件的数组&#xff0c;筛选有用数组 6.array_reduce()函数的基本语法&#xff1a; array_reduce 函数通常用于对数组中的元素进行累…...

软件测试基础理论学习-软件测试方法论

软件测试方法论 软件测试的方法应该建立在不同的软件测试类型上&#xff0c;不同的测试类型会存在不同的方法。本文以软件测试中常见的黑盒测试为例&#xff0c;简述常见软件测试方法。 黑盒测试用例设计方法包括等价类划分法、边界值分析法、因果图法、判定表驱动法、正交试…...

Unity 关于点击不同物品移动并触发不同事件

关于点击不同物品触发不同事件 可以实现在界面中点击不同的物体&#xff0c;移动到物品附近位置&#xff0c;然后触发对应的事件。 首先建立一个公共管理的类&#xff1a; public class InteractionObject : MonoBehaviour {private NavMeshAgent PlayerAgent;private bool …...

c++IO库详细介绍

文章目录 前言c IO 类简介1. iostream库iostream 类标准IO对象 2. fstream库fstream 类 3. stringstream库stringstream 类 格式化和控制错误处理 IO对象无拷贝或赋值IO条件状态主要的状态标志检查流状态控制流状态示例 管理输出缓冲主要操作示例 文件输入输出使用文件流对象示…...

海外静态IP和动态IP有什么区别?推荐哪种?

什么是静态ip、动态ip&#xff0c;二者有什么区别&#xff1f;哪种好&#xff1f;关于这个问题&#xff0c;不难发现&#xff0c;在知道、知乎上面的解释有很多&#xff0c;但据小编的发现&#xff0c;这些回答都是关于静态ip和动态ip的专业术语解释&#xff0c;普通非专业人事…...

OpenHarmony从入门到放弃(一)

OpenHarmony从入门到放弃&#xff08;二&#xff09; 一、OpenHarmony的基本概念和特性 OpenHarmony是由开放原子开源基金会孵化及运营的开源项目&#xff0c;其目标是构建一个面向全场景、全连接、全智能的时代的智能终端设备操作系统。 分布式架构 OpenHarmony采用分布式…...

Unity3D UGUI图集打包与动态使用(TexturePacker)

制作图集的好处&#xff1a; 众所周知CPU是用来处理游戏的逻辑运算的&#xff0c;而GPU是用来处理游戏中图像的。在GPU中&#xff0c;我们要绘制一个图像需要提交图片&#xff08;纹理&#xff09;到显存&#xff0c;然后再进行绘制&#xff08;在这个过程中会产生一次DrawCall…...

java maven项目添加oracle jdbc的依赖

一般添加依赖是直接在pom.xml中添加配置即可&#xff0c;Maven会自动获取对应的jar包&#xff0c;但是oracle驱动依赖添加后会显示红色&#xff0c;代表找不到依赖项&#xff0c;是因为Oracle授权问题&#xff0c;Maven3不提供Oracle JDBC driver&#xff0c;为了在Maven项目中…...

【UEFI基础】EDK网络框架(环境配置)

环境配置 为了能够让使用测试BIOS的QEMU与主机&#xff08;就是指普通的Windows系统&#xff0c;我们使用它来编译BIOS和启动QEMU虚拟机&#xff09;通过网络连接&#xff0c;需要额外的配置。 首先是下载和安装OpenVPN&#xff08;这里安装的是OpenVPN-2.5.5-I601-amd64.msi…...

K8S学习指南(60)-K8S源代码走读之API-Server

文章目录 API Server 的代码结构API Server 的核心逻辑1. 请求处理流程1.1 HTTP 请求处理1.2 认证和授权1.3 API 版本处理1.4 资源路由1.5 资源处理1.6 响应生成 2. 存储层2.1 存储接口定义2.2 存储实现 二次开发扩展点1. 插件机制1.1 插件注册1.2 插件实现 2. 自定义资源定义&…...

基于深度学习的交通标志图像分类识别系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的交通标志图像识别系统。采用TensorFlow和Keras框架&#xff0c;利用卷积神经网络&#xff08;CNN&#xff09;进行模型训练和预测&#xff0c;并引入VGG16迁移学习…...

使用uni-app editor富文本组件设置富文本内容及解决@Ready先于onload执行,无法获取后端接口数据的问题

开始使用富文本组件editor时&#xff0c;不知如何调用相关API设置富文本内容和获取内容&#xff0c;本文将举例详解 目录 一.了解editor组件的常用属性及相关API 1.属性常用说明 2.富文本相关API说明 1&#xff09;editorContext 2&#xff09; editorContext.setContents…...

Spring高手之路-Spring事务的传播机制(行为、特性)

目录 含义 七种事务传播机制 1.REQUIRED&#xff08;默认&#xff09; 2.REQUIRES_NEW 3.SUPPORTS 4.NOT_SUPPORTED 5.MANDATORY 6.NEVER 7.NESTED 含义 Spring事务的传播机制是指在多个事务方法相互调用时&#xff0c;如何处理这些事务的传播行为。对应七种事务传播行为…...

简易机器学习笔记(八)关于经典的图像分类问题-常见经典神经网络LeNet

前言 图像分类是根据图像的语义信息对不同类别图像进行区分&#xff0c;是计算机视觉的核心&#xff0c;是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层次视觉任务的基础。图像分类在许多领域都有着广泛的应用&#xff0c;如&#xff1a;安防领域的人脸识别和…...

pytest conftest通过fixture实现变量共享

conftest.py scope"module" 只对当前执行的python文件 作用 pytest.fixture(scope"module") def global_variable():my_dict {}yield my_dict test_case7.py import pytestlist1 []def test_case001(global_variable):data1 123global_variable.u…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...