Spring Cloud GateWay(4.1.4)
介绍
该项目提供了一个建立在 Spring 生态系统之上的 API 网关,包括:Spring 6、Spring Boot 3 和 Project Reactor。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 API,并为其提供跨领域关注点,例如:安全性、监控/指标和弹性。
Spring Cloud Gateway 有两种不同的版本:服务器和代理交换。每种风格都提供 WebFlux 和 MVC 兼容性。
- Server 变体是一个功能齐全的 API 网关,可以独立使用,也可以嵌入到 Spring Boot 应用程序中。
- Proxy Exchange 变体专门用于基于注释的 WebFlux 或 MVC 应用程序,并允许使用特殊
ProxyExchange对象作为 Web 处理程序方法的参数。
Spring Cloud Gateway Reactive Server
引入 Spring Cloud Gateway
若要在项目中包含 Spring Cloud Gateway,请使用组 ID 为 且 org.springframework.cloud 工件 ID 为 spring-cloud-starter-gateway 的启动器。有关使用当前 Spring Cloud 发布系列设置构建系统的详细信息,请参阅 Spring Cloud 项目页面。
如果包含启动器,但不希望启用网关,请设置 spring.cloud.gateway.enabled=false 。
Spring Cloud Gateway 基于 Spring Boot、Spring WebFlux 和 Project Reactor 构建。因此,当您使用 Spring Cloud Gateway 时,许多熟悉的同步库(例如 Spring Data 和 Spring Security)和模式可能不适用。如果你不熟悉这些项目,我们建议你在使用 Spring Cloud Gateway 之前先阅读他们的文档,以熟悉一些新概念。
Spring Cloud Gateway 需要 Spring Boot 和 Spring Webflux 提供的 Netty 运行时。它不能在传统的 Servlet 容器中工作,也不能在作为 WAR 构建时工作。
Glossary(核心)
- 路由:网关的基本构建块。它由 ID、目标 URI、谓词集合和筛选器集合定义。如果聚合断言为 true,则匹配路由。
- 断言:这是一个 Java 8 函数断言。输入类型是 Spring Framework
ServerWebExchange。这使您可以匹配 HTTP 请求中的任何内容,例如标头或参数。 - 筛选器:这些是使用特定工厂构建的
GatewayFilter实例。在这里,您可以在发送下游请求之前或之后修改请求和响应。
总结

web前端请求,通过一些匹配条件,定位到真正的服务节点。并在这个转发过程的前后,进行一些精细化控制。
predicate就是我们的匹配条件;
filter,就可以理解为一个无所不能的拦截器。有了这两个元素,再加上目标uri,就可以实现一个具体的路由
如何工作
下图提供了 Spring Cloud Gateway 工作原理的高级概述:

客户端向 Spring Cloud Gateway 发出请求。如果网关处理程序映射确定请求与路由匹配,则该请求将发送到网关 Web 处理程序。此处理程序通过特定于请求的筛选器链运行请求。筛选器被虚线分隔的原因是,筛选器可以在发送代理请求之前和之后运行逻辑。执行所有“pre”过滤器逻辑。然后发出代理请求。发出代理请求后,将运行“post”筛选器逻辑。
配置路由断言工厂和网关筛选器工厂
快捷方式配置
spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- Cookie=mycookie,mycookievalue
前面的示例使用两个参数定义 Cookie 路由断言工厂:cookie 名称 mycookie 和要匹配 mycookievalue 的值。
完全展开的参数
完全扩展的参数看起来更像是具有名称/值对的标准 yaml 配置。通常,会有一个 name 密钥和一个 args 密钥。 args 键是键值对的映射,用于配置断言或筛选器。
spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- name: Cookieargs:name: mycookieregexp: mycookievalue
路由断言工厂
Spring Cloud Gateway 将路由作为 Spring WebFlux HandlerMapping 基础结构的一部分进行匹配。Spring Cloud Gateway 包含许多内置的路由断言工厂。所有这些断言都与 HTTP 请求的不同属性匹配。您可以将多个路由断言工厂与逻辑 and 语句组合在一起。
After/Before Route 断言工厂
After 路由断言工厂采用一个参数 a datetime (即 java ZonedDateTime )。此断言匹配在指定日期时间之后发生的请求。
Before 路由断言 工厂采用一个参数 a datetime (即 java ZonedDateTime )。此断言匹配在指定的 datetime .以下示例配置 before route 断言:
spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After=2017-01-20T17:42:47.789-07:00[America/Denver]
此路线符合 2017 年 1 月 20 日 17:42 Mountain Time (Denver) 之前提出的任何请求。
spring:cloud:gateway:routes:- id: before_routeuri: https://example.orgpredicates:- Before=2017-01-20T17:42:47.789-07:00[America/Denver]
此路线符合 2017 年 1 月 20 日 17:42 Mountain Time (Denver) 之前提出的任何请求。
路由间断言工厂(between)
Between 路由断言工厂采用两个参数, datetime1 datetime2 它们是 java ZonedDateTime 对象。此断言匹配在 datetime1 之后和之前 datetime2 发生的请求。该 datetime2 参数必须位于 datetime1 之后。以下示例配置 between route 断言:
spring:cloud:gateway:routes:- id: between_routeuri: https://example.orgpredicates:- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]
此路线符合 2017 年 1 月 20 日 17:42 山地时间(丹佛)之后和 2017 年 1 月 21 日 17:42 山地时间(丹佛)之前提出的任何请求。这对于维护时段可能很有用。
Cookie 路由断言工厂
Cookie 路由断言工厂采用两个参数,cookie name 和 a regexp (Java 正则表达式)。此断言匹配具有给定名称且其值与正则表达式匹配的 cookie。以下示例配置 cookie 路由断言工厂:
spring:cloud:gateway:routes:- id: cookie_routeuri: https://example.orgpredicates:- Cookie=chocolate, ch.p
此路由匹配具有名为 chocolate cookie 的请求,其值与 ch.p 正则表达式匹配。
标头路由断言工厂
Header 路由断言工厂采用两个参数,即 和 header a regexp (这是一个 Java 正则表达式)。此断言与具有给定名称的标头匹配,其值与正则表达式匹配。以下示例配置标头路由断言:
spring:cloud:gateway:routes:- id: header_routeuri: https://example.orgpredicates:- Header=X-Request-Id, \d+
如果请求具有名为 X-Request-Id 其值与 \d+ 正则表达式匹配的标头(即,它的值为一位或多位),则此路由匹配。
主机路由断言工厂
Host 路由断言工厂采用一个参数:主机名 patterns 列表。该图案是蚂 . 蚁风格的图案,作为分隔符。此断言与 Host 与模式匹配的标头匹配。以下示例配置主机路由断言:
spring:cloud:gateway:routes:- id: host_routeuri: https://example.orgpredicates:- Host=**.somehost.org,**.anotherhost.org
还支持 URI 模板变量(如 {sub}.myhost.org )。
如果请求的 Host 标头值为 www.somehost.org or beta.somehost.org 或 www.anotherhost.org ,则此路由匹配。
此谓词将 URI 模板变量(如 sub 前面示例中定义的 )提取为名称和值的映射,并将其 ServerWebExchange.getAttributes() 放在 中,并使用 中 ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE 定义的键。然后, GatewayFilter 这些值可供工厂使用
方法路由断言工厂
The Method Route Predicate Factory takes a methods argument which is one or more parameters: the HTTP methods to match. The following example configures a method route predicate:Method 路由断言工厂采用一个 methods 参数,该参数是一个或多个参数:要匹配的 HTTP 方法。下面的示例配置方法路由断言:
spring:cloud:gateway:routes:- id: method_routeuri: https://example.orgpredicates:- Method=GET,POST 如果请求方法是 a
GET 或 . POST
路径路由断言工厂
Path 路由断言工厂采用两个参数:Spring PathMatcher patterns 列表和名为 matchTrailingSlash (默认为 true ) 的可选标志。以下示例配置路径路由断言:
spring:cloud:gateway:routes:- id: path_routeuri: https://example.orgpredicates:- Path=/red/{segment},/blue/{segment}
如果请求路径为,则此路由匹配,例如: /red/1 或 /red/1/ 或 /red/blue /blue/green 或。
如果 matchTrailingSlash 设置为 false ,则请求路径 /red/1/ 将不匹配。
此谓词将 URI 模板变量(如 segment 前面示例中定义的 )提取为名称和值的映射,并将其 ServerWebExchange.getAttributes() 放在 中,并使用 中 ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE 定义的键。然后, GatewayFilter 这些值可供工厂使用
可以使用实用程序方法(称为 get )来更轻松地访问这些变量。下面的示例演示如何使用该 get 方法:
Map<String, String> uriVariables = ServerWebExchangeUtils.getUriTemplateVariables(exchange);String segment = uriVariables.get("segment"); 查询路由谓词工厂
Query 路由断言工厂采用两个参数:必需 param 参数和可选参数 regexp (Java 正则表达式)。以下示例配置查询路由断言:
spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=green 如果请求包含
green 查询参数,则上述路由匹配。 spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=red, gree. 如果请求包含的
red 查询参数的值与 gree. 正则表达式匹配,则上述路由匹配,因此 green 和 greet 将匹配。
RemoteAddr 路由断言工厂
RemoteAddr 路由断言工厂采用 sources 的列表(最小大小为 1),这些列表是 CIDR 表示法(IPv4 或 IPv6)字符串,例如 192.168.0.1/16 (where 192.168.0.1 是 IP 地址, 16 是子网掩码)。以下示例配置 RemoteAddr 路由断言:
spring:cloud:gateway:routes:- id: remoteaddr_routeuri: https://example.orgpredicates:- RemoteAddr=192.168.1.1/24 如果请求的远程地址为 ,则此路由匹配
192.168.1.10 ,例如 。 GatewayFilter 工厂
路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。路由筛选器的作用域为特定路由。Spring Cloud Gateway 包含许多内置的 GatewayFilter 工厂。
AddRequestHeader
AddRequestHeader GatewayFilter 工厂采用 name - value 参数。以下示例配置: AddRequestHeader GatewayFilter
spring:cloud:gateway:routes:- id: add_request_header_routeuri: https://example.orgfilters:- AddRequestHeader=X-Request-red, blue
此列表将标头添加到 X-Request-red:blue 所有匹配请求的下游请求的标头中。
AddRequestHeader 知道用于匹配路径或主机的 URI 变量。URI 变量可以在值中使用,并在运行时展开。以下示例配置一个 AddRequestHeader GatewayFilter 使用变量的变量:
spring:cloud:gateway:routes:- id: add_request_header_routeuri: https://example.orgpredicates:- Path=/red/{segment}filters:- AddRequestHeader=X-Request-Red, Blue-{segment}
RemoveRequestHeader GatewayFilter 工厂
RemoveRequestHeader GatewayFilter 工厂采用一个 name 参数。它是要删除的标头的名称。以下列表配置: RemoveRequestHeader GatewayFilter
spring:cloud:gateway:routes:- id: removerequestheader_routeuri: https://example.orgfilters:- RemoveRequestHeader=X-Request-Foo
这将在标 X-Request-Foo 头发送到下游之前将其删除。
AddRequestHeadersIfNotPresent
AddRequestHeadersIfNotPresent GatewayFilter Factory :: Spring Cloud Gateway
此列表为所有匹配请求添加 2 个标头 X-Request-Color-1:blue 和 X-Request-Color-2:green 下游请求的标头。这与工作方式 AddRequestHeader 类似,但与它不同的 AddRequestHeader 是,只有在标头不存在时才会这样做。否则,将发送客户端请求中的原始值。
AddRequestParameter
AddRequestParameter GatewayFilter Factory :: Spring Cloud Gateway
AddResponseHeader
AddResponseHeader GatewayFilter Factory :: Spring Cloud Gateway
其余参考 官网:GatewayFilter Factories :: Spring Cloud Gateway
全局筛选器
该 GlobalFilter 接口具有与 GatewayFilter 相同的签名。这些是有条件地应用于所有路由的特殊过滤器。
组合全局筛选和 GatewayFilter 排序
当请求与路由匹配时,筛选 Web 处理程序会 GatewayFilter 将 的所有 GlobalFilter 实例和所有特定于路由的实例添加到筛选器链中。此组合筛选器链按 org.springframework.core.Ordered 接口排序,您可以通过实现 getOrder() 该方法进行设置。
由于Spring Cloud Gateway区分了过滤器逻辑执行的“pre”和“post”阶段(请参阅工作原理),因此优先级最高的过滤器是“pre”阶段的第一个,最后一个是“post”阶段的最后一个。
@Bean
public GlobalFilter customFilter() {return new CustomGlobalFilter();
}public class CustomGlobalFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("custom global filter");return chain.filter(exchange);}@Overridepublic int getOrder() {return -1;}
}
网关指标筛选器(查看网关运行情况)
要启用网关指标,请添加 spring-boot-starter-actuator 为项目依赖项。然后,默认情况下, spring.cloud.gateway.metrics.enabled 该属性为 true ,网关指标筛选器就会运行。此筛选器添加一个以以下标签命名 spring.cloud.gateway.requests 的计时器指标:
-
routeId:路由 ID。 -
routeUri:API 路由到的 URI。 -
outcome:按 HttpStatus.Series 分类的结果。 -
status:返回客户端的请求的 HTTP 状态。 -
httpStatusCode:返回给客户端的请求的 HTTP 状态。 -
httpMethod:用于请求的 HTTP 方法。
然后,可以从中抓取这些指标, /actuator/metrics/spring.cloud.gateway.requests 并可以轻松地与 Prometheus 集成以创建 Grafana 仪表板。
本地缓存过滤器
如果启用了关联属性,则 LocalResponseCache 运行:
-
spring.cloud.gateway.global-filter.local-response-cache.enabled:激活所有路由的全局缓存 -
spring.cloud.gateway.filter.local-response-cache.enabled:激活关联的过滤器以在路由级别使用
此功能为满足以下条件的所有响应启用使用 Caffeine 的本地缓存:
-
该请求是无体 GET。
-
响应具有以下状态代码之一:HTTP 200(确定)、HTTP 206(部分内容)或 HTTP 301(永久移动)。
-
HTTP
Cache-Control标头允许缓存(这意味着它不具有以下任何值:no-store存在于请求中和no-store/或private存在于响应中)。
它接受两个配置参数:
-
spring.cloud.gateway.filter.local-response-cache.size:设置缓存的最大大小以逐出此路由的条目(以 KB、MB 和 GB 为单位)。 -
spring.cloud.gateway.filter.local-response-cache.time-to-live设置缓存条目的过期时间(以 s 表示秒,m 表示分钟,h 表示小时)。
如果未配置这些参数,但启用了全局筛选器,则默认情况下,它会为缓存的响应配置 5 分钟的生存时间。
此筛选器还实现 HTTP Cache-Control 标头中值 max-age 的自动计算。如果 max-age 原始响应中存在该值,则使用 timeToLive 配置参数中设置的秒数重写该值。在后续调用中,此值将使用响应过期前的剩余秒数重新计算。spring.cloud.gateway.global-filter.local-response-cache.enabled 设置为 false 停用所有路由的本地响应缓存,LocalResponseCache 筛选器允许在路由级别使用此功能。
相关文章:
Spring Cloud GateWay(4.1.4)
介绍 该项目提供了一个建立在 Spring 生态系统之上的 API 网关,包括:Spring 6、Spring Boot 3 和 Project Reactor。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 API,并为其提供跨领域关注点,例如:安…...
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHPMYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要…...
【微信小程序】wx.navigateTo传参时不能使用const定义的数据类型
2024年7月21日更新 今日调试时发现似乎是因为使用vant-weapp时按照官方提示关闭了style:"v2"导致的此情况,打开之后无法复现该内容,特此提示。 以下是原内容 如题,笔者测试了好久才找到这个bug,想传递的数据是this.d…...
【Android studio环境搭建】Android studio连接夜神模拟器
Android studio连接夜神模拟器 一、 步骤 1.下载好Android Studio和夜神模拟器, 2.打开夜神模拟器,找到其安装目录下的 nox_adb.exe文件 3.右键进入cmd命令打开,管理员权限执行下面命令 PS D:\Program Files\Nox\bin> .\nox_adb.exe connect 127.…...
Qt:26.Qt项目:贪吃蛇游戏
一、项目功能演示: 开始界面可以点击进入游戏。 点击进入游戏之后,切换到选项界面,该界面可以选择游戏难度,回退,以及查询最近一次游戏得分。 游戏具体界面如下。贴图啥的可以自己换,本人审美不咋行&#x…...
通过HTML/CSS 实现各类进度条的功能。
需求:我们在开发中会遇到使用各式各样的进度条,因为当前插件里面进度条各式各样的,为了方便我们定制化的开发和方便修改样式,我们这里使用HTML和CSS样式来进行开发进度条功能。 通过本文学习我们会明白如何使用 HTML/CSS 创建各种…...
Opencv学习项目3——人脸识别
之前我们获取了一张图像的人脸信息,现在我们来使用特征点分析来匹配两张lyf照片的相似度 获取两张图片的人脸信息 import cv2 import face_recognition# 加载图像文件 img1 face_recognition.load_image_file(lyf1.png) img2 face_recognition.load_image_file(l…...
【js自学打卡11】生成器函数(generator函数)的使用总结+代码举例
力扣的js入门免费题刷完了,开始自己找题练练,顺便捡捡知识点 力扣2649 1.思路 一眼递归,但事实证明也可以直接flat手撕。 arr.flat(Infinity) //直接扁平化到最底层涉及到了一些关于生成器和异步编程相关的知识点,学一下。 2.…...
深入了解jdbc-02-CRUD
文章目录 操作和访问数据库Statement操作数据表的弊端sql注入问题PreparedStatement类ResultSet类与ResultSetMetaData类资源的释放批量插入 操作和访问数据库 数据库的调用的不同方式: Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。PreparedStatem…...
《基于 Kafka + Quartz 实现时限质控方案》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
浏览器的卡顿与react的解决思路
以下内容是阅读过程中结合自己的思考而诞生的产物,不一定准确,但相反的,可能个人对实际情况有很大的误解。 仅做参考,欢迎指正。 前面提到浏览器显示的其实是渲染流程最后渲染出来的一张图片,而一个行为引起的副作用需…...
XXE:XML外部实体引入
XXE漏洞 如果服务器没有对客户端的xml数据进行限制,且版本较低的情况下,就可能会产生xxe漏洞 漏洞利用流程 1.客户端发送xml文件,其中dtd存在恶意的外部实体引用 2.服务器进行解析 3.服务器返回实体引用内容 危害:任意文件读…...
3D培训大师创新培训体验,加速空调关键组件的高效精准安装
如今,空调系统的复杂性和精密性与日俱增,对专业技术人员的要求也日益提高。尤其是决定空调是否能平稳运行的空调关键组件的装配培训,不再局限于传统的理论讲解和实体模型演示,而是更注重数字化、沉浸式学习。 案例背景 某空调公…...
PyTorch 深度学习实践-循环神经网络(高级篇)
视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记总代码练习 上课笔记 个人能力有限,重看几遍吧,第一遍基本看不懂 名字的每个字母都是一个特征x1,x2,x3…,一个名字是一个序列 rnn用GRU 用ASCII表作为词典,长度为128&#x…...
这才是老板喜欢的电子信息类简历
点击可直接使用...
MySQL学习之事务,锁机制
事务 什么是事务? 事务就是逻辑上的一组操作,要么全做,要么全不做 事务经典例子:转账,转账需要两个操作,从一个人账户上减钱,在另一个账户上加钱,比如说小红给小明转账100元&…...
开源知识付费小程序源码 内容付费系统php源码 含完整图文部署教程
在当今数字化时代,知识付费作为一种新型的经济模式,正逐渐受到越来越多内容创作者、专家及商家的青睐。开源知识付费小程序源码和内容付费系统PHP源码作为实现这一模式的重要工具,为构建高效、安全、可扩展的知识付费平台提供了强大的技术支持…...
时序数据库如何选型?详细指标总结!
工业物联网场景,如何判断什么才是好的时序数据库? 工业物联网将机器设备、控制系统与信息系统、业务过程连接起来,利用海量数据进行分析决策,是智能制造的基础设施,并影响整个工业价值链。工业物联网机器设备感知形成了…...
【前端】JavaScript入门及实战51-55
文章目录 51 函数52 函数的参数53 返回值54 练习55 return 51 函数 <!DOCTYPE html> <html> <head> <title></title> <meta charset "utf-8"> <script type"text/javascript">/* 函数:1. 函数也是…...
【引领未来智造新纪元:量化机器人的革命性应用】
在日新月异的科技浪潮中,量化机器人正以其超凡的智慧与精准的操作,悄然改变着各行各业的生产面貌,成为推动产业升级、提升竞争力的关键力量。今天,让我们一同探索量化机器人在不同领域的广泛应用价值,见证它如何以科技…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
