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

三、谷粒商城- Spring Cloud Alibaba(3)

🌻🌻 目录 🌻🌻

  • 一、SpringCloud Alibaba
    • 1.1、SpringCloud Alibaba 简介
    • 1.2、SpringCloud Alibaba-Nacos[作为注册中心]
      • 1.2.1 将微服务注册到 nacos 中
      • 1.2.2 服务注册到 nacos,远程调用
    • 1.3、SpringCloud Alibaba-Nacos[作为配置中心]
    • 1.4、nacos 进阶
      • 1.4.1、核心概念
      • 1.4.2、加载多配置文件
    • 1.5、网关 Gateway
      • 1.5.1、简介
      • 1.5.2、核心概念
      • 1.5.3、使用

一、SpringCloud Alibaba

在这里插入图片描述

1.1、SpringCloud Alibaba 简介

1)、简介

  • Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

在这里插入图片描述

  • 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

在这里插入图片描述

  • 官网:https://spring.io/projects/spring-cloud-alibaba
  • 社区:https://sca.aliyun.com/
  • SpringCloud Alibaba github:https://github.com/alibaba/spring-cloud-alibaba

在这里插入图片描述

2)、为什么使用

在这里插入图片描述

在这里插入图片描述

SpringCloud 的几大痛点

  • SpringCloud 部分组件停止维护和更新,给开发带来不便;
  • SpringCloud 部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制
  • SpringCloud 配置复杂,难以上手,部分配置差别难以区分和合理应用

SpringCloud Alibaba 的优势:

  • 阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用
    成套的产品搭配完善的可视化界面给开发运维带来极大的便利,搭建简单,学习曲线低。

结合 SpringCloud Alibaba 我们最终的技术搭配方案:

  • SpringCloud Alibaba - Nacos:注册中心(服务发现/注册)
  • SpringCloud Alibaba - Nacos:配置中心(动态配置管理)
  • SpringCloud - Ribbon:负载均衡
  • SpringCloud - Feign:声明式 HTTP 客户端(调用远程服务)
  • SpringCloud Alibaba - Sentinel:服务容错(限流、降级、熔断)
  • SpringCloud - Gateway:API 网关(webflux 编程模式)
  • SpringCloud - Sleuth:调用链监控
  • SpringCloud Alibaba - Seata:原 Fescar,即分布式事务解决方案

3)、版本选择

  • 由于 Spring Boot 1Spring Boot 2Actuator 模块的接口和注解有很大的变更,且spring-cloud-commons1.x.x 版本升级到 2.0.0 版本也有较大的变更,因此我们采取跟SpringBoot 版本号一致的版本:

版本适配:如何构建

在这里插入图片描述

  • ◼ 1.5.x 版本适用于 Spring Boot 1.5.x
  • ◼ 2.0.x 版本适用于 Spring Boot 2.0.x
  • ◼ 2.1.x 版本适用于 Spring Boot 2.1.x

4)、项目中的依赖

  • common 项目中引入如下。进行统一管理

在这里插入图片描述

在 common 项目中引入如下。进行统一管理
<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.0.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

1.2、SpringCloud Alibaba-Nacos[作为注册中心]

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现配置管理服务管理平台。他是使用 java 编写。需要依赖 java 环境

Nacos 文档地址: https://nacos.io/zh-cn/docs/quick-start.html

1.2.1 将微服务注册到 nacos 中

应用接入: https://github.com/alibaba/spring-cloud-alibaba/

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

  • 1、首先,打开gulimall-common修改 pom.xml 文件,引入 Nacos Discovery Starter。

在这里插入图片描述

<!--服务发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 2、官网下载 nacos-server
  • https://github.com/alibaba/nacos/releases 或 https://nacos.io/download
  • 本地资源库获取

在这里插入图片描述

双击startup.cmd直接启动 :

在这里插入图片描述

在浏览器访问:http://127.0.0.1:8848/nacos 用户名/密码 都是nacos

在这里插入图片描述

  • 3、在应用的 /src/main/resources/application.yml配置文
    件中配置 Nacos Server 地址

在这里插入图片描述

spring:cloud:nacos:server-addr: 127.0.0.1:8848
  • 4、使用@EnableDiscoveryClient 开启服务注册发现功能

在这里插入图片描述

@EnableDiscoveryClient  //需要注册的这里都要加上去,如下的 gulimall-member,gulimall-order
@SpringBootApplication
public class GulimallCouponApplication {public static void main(String[] args) {SpringApplication.run(GulimallCouponApplication.class, args);}
}

为其余都添加上:

在这里插入图片描述

  • 5、在应用的 /src/main/resources/application.properties 配置文
    件中配置 Nacos Server 地址

在这里插入图片描述

#注意:每一个应用都应该有名字,这样才能注册上去。修改 application.yml 文件
#需要注册的都要配置
spring:application:name: gulimall-coupon     
  • 为其余都添加上:application.yml

在这里插入图片描述

  • 6、在idea中启动应用,观察 nacos 服务列表是否已经注册上服务

在这里插入图片描述

  • 7、启动 nacos-server
  • ◼ 双击 bin 中的 startup.cmd 文件
  • ◼ 访问 http://localhost:8848/nacos/
  • ◼ 使用默认的 nacos/nacos 进行登录

在这里插入图片描述

1.2.2 服务注册到 nacos,远程调用

注册更多的服务上去,测试使用 feign 远程调用

  • Feign 使用三步
    1、导包 openfeign
    2、编写接口,进行远程调用
    3、开启@EnableFeignClients 功能
  • 1、导包 openfeign(前面已经引入了)

在这里插入图片描述

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  • 2、编写接口,进行远程调用

在这里插入图片描述

//2.远程服务
@RequestMapping("/member/list")
public R couponmember(){CouponEntity couponEntity = new CouponEntity();couponEntity.setCouponName("优惠券满减,满200减100");return R.ok().put("coupons", Arrays.asList(couponEntity));
}

创建接口:

在这里插入图片描述

package com.gansu.gulimall.member.feign;import com.gansu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;@FeignClient("gulimall-coupon")
public interface CouponFeignService {//2.远程服务@RequestMapping("copupon/coupon/member/list")public R couponmember();
}
  • 3、开启@EnableFeignClients 功能

在这里插入图片描述

//开启远程调用功能
@EnableFeignClients(basePackages = "com.gansu.gulimall.member.feign")
  • 4、测试(启动服务,访问:http://localhost:8000/member/member/coupons)

在这里插入图片描述

@Autowired
private CouponFeignService couponFeignService;@RequestMapping("/coupons")
public R test(){MemberEntity memberEntity = new MemberEntity();memberEntity.setNickname("张三");R couponmember = couponFeignService.couponmember();return R.ok().put("member",memberEntity).put("coupons",couponmember.get("coupons"));
}

在这里插入图片描述

  • 4、测试(关闭(类似挂掉)服务gulimall-coupon,再次访问:http://localhost:8000/member/member/coupons)

在这里插入图片描述

在这里插入图片描述

  • 6、更多配置

https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md#more

1.3、SpringCloud Alibaba-Nacos[作为配置中心]

参考 官网文档:

在这里插入图片描述

  • 1、pom.xml 引入 Nacos Config Starter。

在这里插入图片描述

 <!--服务注册-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 2、在应用的 /src/main/resources/bootstrap.properties配置文件中配置 Nacos Config 元数据

在这里插入图片描述

spring.application.name=nacos-config-example
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#主要配置应用名和配置中心地址
  • 3.1 之前是这样配置的:

在这里插入图片描述

coupon.user.name=Daniel
coupon.user.age=22
  • 3.2 有了nacos现在就直接在界面添加了:
    • ① 创建配置

在这里插入图片描述

    • ② 发布创建修改的配置

在这里插入图片描述

    1. 测试:动态获取配置(刷新配置)

在这里插入图片描述

@RefreshScope
/*** 1、如何使用Nases作为配置中心统一管理配置* 1)引入依赖,*  <!--服务注册-->*  <dependency>*      <groupId>com.alibaba.cloud</groupId>*       <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>* </dependency>* 2)创建-个bootstrap.properties。*          spring.application.name=nacos-config-example*          spring.cloud.nacos.config.server-addr=127.0.0.1:8848*  3)需要给配置中心默认添加一个叫 数据集(Data Id)gulimall-coupon.properties。默认规则,应用名.properti给 应用名.properties 添加任何配置*  4)动态获取配置。* @Refreshscope:动态获取并刷新配置@Value("${配置项的名}"):获取到配置。如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。*/@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private Integer age;
@RequestMapping("/test")
public R test(){return R.ok().put("name",name).put("age",age);
};

5.启动服务,修改配置参数再次查看显示

http://localhost:7000/copupon/coupon/test

在这里插入图片描述

在这里插入图片描述

再次查看你:

在这里插入图片描述

1.4、nacos 进阶

1.4.1、核心概念

命名空间

  • 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 GroupData ID
    配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生
    产环境的资源(如配置、服务)隔离等。
 *1)、命名空间:配置隔离;*默认:public(保留空间);默认新增的所有配置都在public空间。*1、开发,测试,生产:利用命名空间来做环境隔离。注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置,spring.cloud.nacos.config.namespace=df5f3ec1-ff43-4e4b-8748-89a26557dc1f*2、每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置

① 查看默认的命名空间(2.4.2这里不显示默认的,建议用之前的1.1.3

在这里插入图片描述

② 添加命名空间 (dev:开发命名空间,prod:生产命名空间

在这里插入图片描述

③ 切换到命名空间 dev,并且在命名空间dev下面创建配置,如下所示:

dev:开发命名空间,prod:生产命名空间

在这里插入图片描述

在这里插入图片描述

④ 在idea中 bootstrap.properties中添加配置

在这里插入图片描述

⑤ 重启服务浏览器查看

http://localhost:7000/copupon/coupon/test

在这里插入图片描述

配置集 ID:
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

2)、配置集:所有的配置的集合
3)、配置集TD:类似文件名。Data Ip:类似文件名

配置分组:
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和MQ_topic 配置。

4)、配置分组:默认所有的配置集都属于:DEFAULT_GROUP;比如双11,618,双12
每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod

① 创建分组及配置

在这里插入图片描述

coupon.user.name=1111
coupon.user.age=1111

② 在idea中 bootstrap.properties中添加配置

在这里插入图片描述

⑤ 重启服务浏览器查看

http://localhost:7000/copupon/coupon/test

在这里插入图片描述

1.4.2、加载多配置文件

在这里插入图片描述

详细拆分配置如下:

  • ① 数据源配置

在这里插入图片描述

  • ② mybatis-plus配置

在这里插入图片描述

  • ③ 剩余的配置

在这里插入图片描述

④ 最终配置显示

在这里插入图片描述

⑤ 注释掉 application.properties里面的文件,随意开启一个服务进行测试,如gulimall-product

在这里插入图片描述

1.5、网关 Gateway

1.5.1、简介

网关作为流量的入口,常用功能包括路由转发权限校验限流控制等。而 springcloud gateway作为 SpringCloud 官方推出的第二代网关框架,取代了 Zuul 网关

在这里插入图片描述

  • 网关提供 API 全托管服务,丰富的 API 管理功能,辅助企业管理大规模的 API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷、流量、监控日志等功能。
  • Spring Cloud Gateway 旨在提供一种简单而有效的方式来对 API 进行路由,并为他们提供切面,例如:安全性,监控/指标 和弹性等。
  • 官方文档地址:
    https://docs.spring.io/spring-cloud-gateway/reference/spring-cloud-gateway/how-it-works.html

在这里插入图片描述

Spring Cloud Gateway 特点:

  • ⚫ 基于 Spring5,支持响应式编程和 SpringBoot2.0
  • ⚫支持使用任何请求属性进行路由匹配
  • ⚫特定于路由的断言和过滤器
  • ⚫ 集成 Hystrix 进行断路保护
  • ⚫ 集成服务发现功能
  • ⚫ 易于编写 PredicatesFilters
  • ⚫ 支持请求速率限制
  • ⚫ 支持路径重写

思考:

为什么使用 API 网关?

  • API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:
  • ⚫客户端会多次请求不同的微服务,增加了客户端的复杂性。
  • ⚫存在跨域请求,在一定场景下处理相对复杂。
  • ⚫认证复杂,每个服务都需要独立认证。
  • ⚫ 难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施。
  • ⚫某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难。
  • 以上这些问题可以借助 API 网关解决。API 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 API 网关这一层。也就是说,API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 API 网关来做,这样既提高业务灵活性又不缺安全性:
    使用 API 网关后的优点如下:

易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。

  • ⚫易于认证。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
  • ⚫减少了客户端与各个微服务之间的交互次数。

1.5.2、核心概念

  • 路由。路由是网关最基础的部分,路由信息有一个 ID、一个目的 URL、一组断言和一组Filter 组成。如果断言路由为真,则说明请求的 URL 和配置匹配
  • 断言Java8 中的断言函数。Spring Cloud Gateway 中的断言函数输入类型是 Spring5.0 框架中的 ServerWebExchange。Spring Cloud Gateway 中的断言函数允许开发者去定义匹配来自于 http request 中的任何信息,比如请求头和参数等。
  • 过滤器。一个标准的 Spring webFilter。Spring cloud gateway 中的 filter 分为两种类型的Filter,分别是 Gateway Filter 和 Global Filter。过滤器 Filter 将会对请求和响应进行修改处理

工作原理:

  • 官方文档地址:
    https://docs.spring.io/spring-cloud-gateway/reference/spring-cloud-gateway/how-it-works.html

在这里插入图片描述

在这里插入图片描述

  • 客户端发送请求给网关,网关 HandlerMapping 判断是否请求满足某个路由,满足就发给网关的 WebHandler。这个 WebHandler 将请求交给一个过滤器链,请求到达目标服务之前,会执行所有过滤器的 pre 方法。请求到达目标服务处理之后再依次执行所有过滤器的 post 方法。
  • 一句话满足某些断言(predicates)就路由到指定的地址(uri),使用指定的过滤器(filter)

1.5.3、使用

1、创建网关子模块 gulimall-gateway,引入网关

  • ① 创建 子模块 gulimall-gateway

在这里插入图片描述

  • ② 创建 子模块 gulimall-gateway

在这里插入图片描述

  • ③ 搜索 gateway如下

在这里插入图片描述

  • ④ 统一版本引入依赖如下

在这里插入图片描述

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
  • ⑤ 分别配置nacos服务发现(application.properties)和服务配置(bootstrap.properties)

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

spring:application:name: gulimall-gateway

在这里插入图片描述

  • ⑥ 在 gulimall-gateway下面创建 application.propertiesapplication.ymlbootstrap.properties

参考官网:https://docs.spring.io/spring-cloud-gateway

在这里插入图片描述

gulimall-gateway下面创建 application.propertiesapplication.ymlbootstrap.properties

在这里插入图片描述
application.properties

server.port=88spring.application.name=gulimall-gateway
spring.cloud.nacos.server-addr=127.0.0.1:8848

application.yml

spring:application:name: gulimall-gatewaycloud:nacos:discovery:server-addr: 127.0.0.1:8848gateway:routes:# 测试内容- id: test_routeuri: https://www.baidu.compredicates:- Query=url,baidu- id: qq_routeuri: https://www.qq.compredicates:- Query=url,qqdatasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.10.100:3306/gulimall_smsusername: rootpassword: rootmybatis-plus:mapper-locations: classpath:/mapper/**/*.xmlglobal-config:db-config:id-type: auto

bootstrap.properties

spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=68c8750d-50cc-4655-a8b9-bccb38ac99d4
  • ⑦ 不开启数据关联 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

在这里插入图片描述

启动测试:http://localhost:88/hello?url=baidu

在这里插入图片描述

https://qq.com/hello

在这里插入图片描述

  • Gitee地址:https://gitee.com/Daniel-sys/gulimall.git

在这里插入图片描述

  • 文章所有源码

相关文章:

三、谷粒商城- Spring Cloud Alibaba(3)

&#x1f33b;&#x1f33b; 目录 &#x1f33b;&#x1f33b; 一、SpringCloud Alibaba1.1、SpringCloud Alibaba 简介1.2、SpringCloud Alibaba-Nacos[作为注册中心]1.2.1 将微服务注册到 nacos 中1.2.2 服务注册到 nacos&#xff0c;远程调用 1.3、SpringCloud Alibaba-Naco…...

MATLAB和Python激发光谱

激发光谱是一种用于研究物质发光特性的分析方法。当样品吸收特定波长的光时&#xff0c;电子从基态跃迁至激发态。随后&#xff0c;当电子返回基态时&#xff0c;会发射出光子&#xff0c;产生荧光或磷光。激发光谱通过测量不同波长的入射光激发下的发光强度来获取数据。该技术…...

学习笔记024——Ubuntu 安装 Redis遇到相关问题

目录 1、更新APT存储库缓存&#xff1a; 2、apt安装Redis&#xff1a; 3、如何查看检查 Redis版本&#xff1a; 4、配置文件相关设置&#xff1a; 5、重启服务&#xff0c;配置生效&#xff1a; 6、查看服务状态&#xff1a; 1、更新APT存储库缓存&#xff1a; sudo apt…...

UE5 腿部IK 解决方案 footplacement

UE5系列文章目录 文章目录 UE5系列文章目录前言一、FootPlacement 是什么&#xff1f;二、具体实现 前言 在Unreal Engine 5 (UE5) 中&#xff0c;腿部IK&#xff08;Inverse Kinematics&#xff0c;逆向运动学&#xff09;是一个重要的动画技术&#xff0c;用于实现角色脚部准…...

北航软件算法C4--图部分

C4上级图部分 TOPO!步骤代码段TOPO排序部分 完整代码 简单的图图题目描述输入输出样例步骤代码段开辟vector容器作为dist二维数组初始化调用Floyd算法查询 完整代码 负环题目描述输入输出样例步骤代码段全局变量定义spfa1函数用于判断是否有负环spfa2用于记录每个点到1号点的距…...

PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口

PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口 众所周知&#xff0c;在windows下开发PCL点云最快的方式就是到官网下载其预编译好的库&#xff0c;比如&#xff1a; PCL-1.14.0-AllInOne-msvc2022-win64.exe 这时候你到网络上搜索&#xff0c;大概率会有两种方案…...

本地音乐服务器(二)

4. 上传音乐模块设计 4.1 上传音乐的接口设计 请求和响应设计&#xff1a; 新建music实体类&#xff1a; Data public class Music {private int id;private String title;private String singer;private String time;private String url;private int userid; } 4.2 创建Mu…...

第三十六篇——伯努利试验:到底如何理解随机性?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 概率论指导着我们对于直觉不靠谱的事情&#xff0c;以及为我们如何更高效…...

【Android、IOS、Flutter、鸿蒙、ReactNative 】屏幕适配

Android Java 屏幕适配 参考 今日头条适配依赖配置 添加设计屏幕尺寸 设置字体大小 通过切换不同屏幕尺寸查看字体大小 设置文本宽高 通过切换不同屏幕尺寸查看文本宽高 Android Compose 屏幕适配 <...

candence : 如何利用EXCEL 绘制复杂、多管脚元件

如何利用EXCEL 绘制复杂、多管脚元件 前面的步骤直接略过 我们以STM32F407VEXX 系列 100pin 芯片为例讲解&#xff1a; 1、新建好一个空元件 2、使用阵列&#xff0c;放置管脚 点击 “ ok ” 3、选中所有管脚 右键 “edit properites” 出现如下页面 4、点击 左上角&…...

项目配置文件选择(Json,xml,Yaml, INI)

选择使用哪种类型的配置文件&#xff08;如 JSON、XML 或其他格式&#xff09;取决于多个因素&#xff0c;包括项目的需求、团队的熟悉程度、数据结构的复杂性以及可读性和可维护性等。以下是对常见配置文件格式的比较&#xff0c;以及在不同情况下的推荐&#xff1a; 1. JSON&…...

Android 使用Retrofit 以纯二进制文件流上传文件

一、背景 一般上传文件都是以表单形式上传文件&#xff0c;最近项目中涉及到非表单形式上传文件流&#xff0c;分为单个文件流上传、大文件分段上传&#xff0c;此种情景资料较少&#xff0c;这里记录下。 二、方案介绍 2.1 需求协议 1. 上传文件 API 端点&#xff1a;/serv…...

Vue3踩坑记录

目录 一、定义常变量 1.1、ref和reactive到底用谁&#xff1f; 二、双向绑定 2.1、直接改变表格该行数据 2.1、在弹窗改变表格该行数据 一、定义常变量 1.1、ref和reactive到底用谁&#xff1f; 已知&#xff1a;使用ref定义基础类型数据&#xff1b;使用reactive定义复…...

大数据-227 离线数仓 - Flume 自定义拦截器(续接上节) 采集启动日志和事件日志

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…...

【热门主题】000054 ECMAScript:现代 Web 开发的核心语言

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…...

【Pytorch】torch.nn.functional模块中的非线性激活函数

在使用torch.nn.functional模块时&#xff0c;需要导入包&#xff1a; from torch.nn import functional 以下是常见激活函数的介绍以及对应的代码示例&#xff1a; tanh (双曲正切) 输出范围&#xff1a;(-1, 1) 特点&#xff1a;中心对称&#xff0c;适合处理归一化后的数据…...

reactflow 中 useNodesState 模块作用

1. 节点状态管理核心功能 useNodesState是一个关键的钩子函数&#xff0c;用于专门管理节点&#xff08;Nodes&#xff09;的状态。节点是流程图的核心元素&#xff0c;它们可以代表各种实体&#xff0c;如流程中的任务、系统中的组件或者数据结构中的元素。 useNodesState提…...

Go语言内存分配源码分析学习笔记

大家好&#xff0c;我是V 哥。GO GO GO&#xff0c;今天来说一说Go语言内存分配问题&#xff0c;Go语言内存分配的源码主要集中在runtime包中&#xff0c;它实现了Go语言的内存管理&#xff0c;包括初始化、分配、回收和释放等。下面来对这些过程详细分析一下&#xff0c;先赞后…...

【jvm】方法区常用参数有哪些

目录 1. -XX:PermSize2. -XX:MaxPermSize3. -XX:MetaspaceSize&#xff08;Java 8及以后&#xff09;4. -XX:MaxMetaspaceSize&#xff08;Java 8及以后&#xff09;5. -Xnoclassgc6. -XX:TraceClassLoading7.-XX:TraceClassUnLoading 1. -XX:PermSize 1.设置JVM初始分配的永久…...

JAVA环境的配置

首先找到JDK环境的官网。 Java Archive Downloads - Java SE 8u211 and laterhttps://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 我下载的最后一个x64.exe&#xff0c;下载后&#xff0c;直接双击运行&#xff0c;我这里默认安装到…...

LLM文档对话 —— pdf解析关键问题

一、为什么需要进行pdf解析&#xff1f; 最近在探索ChatPDF和ChatDoc等方案的思路&#xff0c;也就是用LLM实现文档助手。在此记录一些难题和解决方案&#xff0c;首先讲解主要思想&#xff0c;其次以问题回答的形式展开。 二、为什么需要对pdf进行解析&#xff1f; 当利用L…...

MySQL单表查询时索引使用情况

本文针对 MySQL 单表查询时索引使用的几种场景情况进行分析。 假设有一个表如下&#xff1a; CREATE TABLE single_table (id INT NOT NULL AUTO_INCREMENT,key1 VARCHAR(100),key2 INT,key3 VARCHAR(100),key_part1 VARCHAR(100),key_part2 VARCHAR(100),key_part3 VARCHAR(1…...

Qt邮箱程序改良版(信号和槽)

上一版代码可以正常使用,但是会报错 上一篇文章 错误信息 "QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread" 指出了一个问题&#xff0c;即在非主线程中尝试启用或禁用套接字通知器&#xff08;QSocketNotifier&#xff09;…...

入门到精通mysql数据(四)

5、运维篇 5.1、日志 5.1.1、错误日志 错误日志是MySQL中最重要的日志之一,它记录了当mysqld启动和停止,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的,默认存放目录/var/log…...

Java 设计模式 详解

在Java开发中&#xff0c;设计模式是一种常见的、成熟的解决方案&#xff0c;用于应对特定的设计问题和复杂性管理。以下是一些常用的设计模式&#xff0c;它们可以分为三类&#xff1a;创建型模式、结构型模式和行为型模式。 一、创建型模式 创建型模式主要负责对象的创建&a…...

卡尔曼滤波学习资料汇总

卡尔曼滤波学习资料汇总 其实&#xff0c;当初的目的&#xff0c;是为了写 MPU6050 的代码的&#xff0c;然后不知不觉学了那么多&#xff0c;也是因为好奇、感兴趣吧 有些还没看完&#xff0c;之后笔记也会同步更新的 学习原始材料 【卡尔曼滤波器】1_递归算法_Recursive P…...

linux003.在ubuntu中安装cmake的方法

1.cmake安装程序下载 https://cmake.org/files/v3.30/ 2.解压并下载包 解压cmake压缩包 tar -xvzf cmake.tar.gz进入解压目录 cd cmake-<version>编辑~/.bashrc nano ~/.bashrc在文件的末尾添加如下代码 export PATH/home/xwl/software/cmake/bin:$PATH然后运行以…...

EtherNet/IP转Profinet网关连接发那科机器人配置实例解析

本案例主要展示了如何通过Ethernet/IP转Profinet网关实现西门子1200PLC与发那科搬运机器人的连接。所需的设备有西门子1200PLC、开疆智能Ethernet/IP转Profinet网关以及Fanuc机器人。 具体配置步骤&#xff1a;打开西门子博图配置软件&#xff0c;添加PLC。这是配置的第一步&am…...

自动化运维-检测Linux服务器CPU、内存、负载、IO读写、机房带宽和服务器类型等信息脚本

前言&#xff1a;以上脚本为今年8月1号发布的&#xff0c;当时是没有任何问题&#xff0c;但现在脚本里网络速度测试py文件获取不了了&#xff0c;测速这块功能目前无法实现&#xff0c;后面我会抽时间来研究&#xff0c;大家如果有建议也可以分享下。 脚本内容&#xff1a; #…...

ubuntu24.04设置开机自启动Eureka

ubuntu24.04设置开机自启动Eureka 之前我们是在/root/.bashrc的文件中增加了一条命令 nohup java -jar /usr/software/eurekaServer-auth-prd-03.jar > /usr/software/log.log 2>&1 &但上面这条命令只有在登录root的用户时&#xff0c;才会执行&#xff0c;如果…...

北京网站建设的服务/广州网站seo推广

使用DIV CSS实现字体居中的CSS样式单词为text-align&#xff0c;其值为center(居中)。下面我们来看一下css使用text-align属性设置文字居中的方法。css可以使用text-align属性设置字体居中。将text-align属性值设为center即可使元素中的文字居中。text-align语法&#xff1a;te…...

wordpress 显示 列表/手机建站教程

stay hungry stay foolish&#xff01;&#xff01; 创新 细节 热爱 责任 求知欲 大脑工作 犯错 哲学 使命 &#xff1a; 我们生来就随身带着一件东西&#xff0c;这件东西指示着我们的渴望&#xff0c;兴趣&#xff0c;热情以 及好奇心&#xff0c;这就是使命。你不需要任何权…...

建做网站/湖南省人民政府官网

sudo apt-get remove --purge software-name转载于:https://www.cnblogs.com/gaodong/p/3463607.html...

360网站怎么建设/百度ai助手入口

说到删除节点&#xff0c;马上就会想到remove&#xff0c;不过原来还有一个detach&#xff0c;而且它们还是有区别的&#xff0c;就是detach保留了jquery的数据&#xff0c;而remove就会完全删除干净。所以如果在删除一个dom节点后还想保留它的数据以供使用就要用detach了。 jq…...

东莞社保官方网站/桂林seo顾问

机器人奇点是个让生产商和用户都很头痛的问题&#xff0c;碰上了&#xff0c;严重点可能造成“机毁人亡”。那到底什么是机器人奇点&#xff0c;它是怎么形成的&#xff0c;怎么样才能避免机器人奇点&#xff1f;下面这篇文章由Robotiq公司的Alex Owen-Hill撰写&#xff0c;它能…...

电子印章在线生成/南宁百度seo推广

生活除了眼前的苟且&#xff0c;还有诗与远方&#xff01;SmartX&#xff0c;这个立志成为中国超融合市场第一品牌的成长型企业&#xff0c;毫不犹豫地选择了“远方”。从2013年成立至今5年有余&#xff0c;SmartX在持续不断地细细打磨产品&#xff0c;融资不紧不慢&#xff0c…...