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

SpringCloud全家桶— — 【1】eureka、ribbon、nacos、feign、gateway

SpringCloud全家桶— — 组件搭建

1 Eureka

1.1 Eureka-server

创建eureka-server的SpringBoot项目

①导入依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

②启动类上添加注解@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
}

③编写配置文件,指明eureka地址

eureka本身也需要注册上去

server:port: 10086
spring:application:name: eureka-server
eureka:client:service-url: defaultZone: http://127.0.0.1:10086/eureka

启动eureka所在SpringBoot项目,浏览器输入http://127.0.0.1:10086
在这里插入图片描述

1.2 Eureka-client

eureka作为注册中心,我们现在将服务注册到eureka

①导入依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

②编写配置文件

spring:application:# 服务名称name: userservice
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka

1.3 服务发现

现在有两个模块:user-service和order-service;我们都将他们注册到eureka,现在order-service通过RPC远程调用user-service

order-service与user-service注册到eureka过程同上
①order配置restTemplate

可以单独在一个配置类写,或者直接写到SpringBootApplication中,只要注入到Spring容器中就行

/*** 创建RestTemplate并注入Spring容器*/@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}

②service中注入restTemplate

restTemplate是Spring提供的给我们操作rest服务的客户端

@Autowired
private RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// 2.利用RestTemplate发起http请求,查询用户// 2.1.url路径【需要使用userservice对应的服务名】String url = "http://userservice/user/" + order.getUserId();// 2.2.发送http请求,实现远程调用User user = restTemplate.getForObject(url, User.class);// 3.封装user到Orderorder.setUser(user);// 4.返回return order;
}

spring会自动帮助我们从eureka-server端,根据userservice这个服务名称,获取实例列表,而后完成负载均衡。

2 Ribbon(以restTemplate为例)

导入openfeign,openfeign中默认集成了ribbon

2.1 restTemplate集成ribbon

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

①导入依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

②创建restTemplate,并添加上负载均衡注解

可以在启动类的main方法中创建,也可以单独写一个配置类,只要最后有bean标识被spring管理即可

 /*** 创建RestTemplate并注入Spring容器*/@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}

@LoadBalanced是以轮询方式访问

2.1 自定义负载均衡

有两种方式:
①定义一个新的IRule

@Bean
public IRule randomRule(){return new RandomRule();
}

无法精准对某个微服务进行处理

②在配置文件中编写

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

注意,一般用默认的负载均衡规则,不做修改。

  • Ribbon默认是懒加载,也就是第一次访问的时候才会创建LoadBalanceClient,这样会导致请求时间会变得很长
  • 推荐开启饥饿加载(项目启动时创建)
ribbon:eager-load:enabled: trueclients: userservice

clients可以精准对某个微服务进行处理

3 Feign、OpenFeign

3.1 Feign

restTemplate是Spring提供给我们的用于调用rest服务的客户端

RestTemplate调用方式:
在这里插入图片描述

•代码可读性差,编程体验不统一
•参数复杂URL难以维护

说明:Feign是一个声明式的HTTP客户端
①导入依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

②开启注解

在SpringBootApplication上开启对应注解

@EnableFeignClients

③编写Feign的客户端

# userservice是服务名称
# @GetMapping()中填写对应controller访问路径
@FeignClient("userservice")
public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}

Feign主要是通过SpringMVC的注解来声明远程调用信息

  • 服务名称:userservice
  • 请求方式:GET
  • 请求路径:/user/{id}
  • 请求参数:Long id
  • 返回值类型:User

④在service中调用feignClient

@Service
public class OrderService {@Autowiredprivate UserClient userClient;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// 2.用Feign远程调用User user = userClient.findById(order.getUserId());// 3.封装user到Orderorder.setUser(user);// 4.返回return order;}
}

引入Feign的步骤:

1. 导入依赖
2. 添加@EnableFeignClients注解
3. 编写FeignClient接口
4. service中调用feignClient

Feign可以支持很多自定义配置

  • 修改日志级别
  • 响应结果的解析器(如:解析json为java对象)
  • 请求参数编码(将请求参数编码,便于http发送请求)
  • 支持的注解格式
  • 失败重试机制(默认没有,但是会使用ribbon的重试)

一般情况下,默认值就能满足我们的使用,如果要自定义时,只需要创建自定义的@Bean覆盖默认Bean即可

修改feign的默认配置

以修改日志级别为例
方式1:修改配置文件

feign:  client:config: default: # 这里用default就是全局配置,如果是将default改为具体服务名称,则是针对某个微服务的配置loggerLevel: FULL #  日志级别 

方式2:编写代码

先声明一个类,然后声明一个Logger.Level的对象

日志配置类:

public class DefaultFeignConfiguration  {@Beanpublic Logger.Level feignLogLevel(){return Logger.Level.BASIC; // 日志级别为BASIC}
}

全局生效:将其放到启动类的@EnableFeignClients这个注解中

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class) 

局部生效:把它放到对应的@FeignClient这个注解中

@FeignClient(value = "userservice", configuration = DefaultFeignConfiguration .class) 

Feign的使用优化

提高Feign的性能主要手段就是使用连接池代替默认的URLConnection(不支持连接池)

  • 以Apache的HttpClient来演示

①引入依赖

<!--httpClient的依赖 -->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId>
</dependency>

②配置连接池(配置文件)

feign:client:config:default: # default全局的配置loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息httpclient:enabled: true # 开启feign对HttpClient的支持max-connections: 200 # 最大的连接数max-connections-per-route: 50 # 每个路径的最大连接数

最佳使用Feign的编写方式

1. 继承方式

①定义API接口
②FeignClient和controller都继承该接口
在这里插入图片描述

简单、实现了代码共享;但是服务提供方和消费方紧耦合,参数列表中的注解映射不会继承,因此controller中必须再此声明方法、参数列表、注解

2. 抽取方式

将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。

  • 例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务引用该依赖包,即可直接使用。

在这里插入图片描述

各个微服务引用feign-api模块,然后调用对应方法,直接接收返回值即可

注意:order-service模块引用feign-api之后需要修改order-service启动类上的扫描包路径

  • 因为UserClient现在在cn.itcast.feign.clients包下
  • 而order-service的@EnableFeignClients注解是在cn.itcast.order包下,不在同一个包,无法扫描到UserClient。
# 方法1:指定扫描的包
@EnableFeignClients(basePackages = "cn.itcast.feign.clients")# 方法2:指定需要加载的Client接口
@EnableFeignClients(clients = {UserClient.class})

4 Nacos

详细链接:https://editor.csdn.net/md/?articleId=126063863

4.1 nacos注册管理

①引入依赖

# 在父pom中引入
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>
# 在微服务中引入
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

②微服务配置文件中配置nacos地址

spring:cloud:nacos:server-addr: localhost:8848

③启动类上添加注解

@EnableDiscoveryClient//要注册服务到nacos必须加该注解

4.2 nacos其他功能

  1. 分级存储模型

为了灾备,防止"鸡蛋都碎在一个篮子里"

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 集群名称
  1. 设置集群负载均衡
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 
  1. 设置权重
    在这里插入图片描述
  2. 环境隔离

namespace

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZnamespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

4.3 nacos与eureka对比

在这里插入图片描述

  • 共同点:
  1. 都支持服务注册和拉取
  2. 都支持服务提供者采用心跳方式做健康检测
  • 区别:
  1. nacos支持服务端主动检测服务提供者状态。临时实例采用心跳模式,非临时实例采用主动检测模式
  2. nacos临时实例不正常会剔除,非临时实例则不剔除
  3. nacos支持服务列表变更推送
  4. Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

4.4 nacos配置管理

  1. 依赖

在对应微服务中引入依赖

<!--nacos配置管理依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 创建bootstrap.yml文件【优先级比application.yml高】

指明nacos中的配置文件名称和地址

spring:application:name: userservice # 服务名称profiles:active: dev #开发环境,这里是dev cloud:nacos:server-addr: localhost:8848 # Nacos地址config:file-extension: yaml # 文件后缀名

5 服务网关

  • 网关作用:
  1. 请求路由
  2. 权限控制
  3. 限流
  • SpringCloud中的网关:
  1. gateway
  2. zuul
    Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

详细文章:https://editor.csdn.net/md/?articleId=127762843

5.1 搭建网关(以gateway为例)

①依赖

引入gateway依赖同时将网关服务注册到nacos中

<!--网关-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

②配置文件

server:port: 10010 # 网关端口
spring:application:name: gateway # 服务名称cloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: # 网关路由配置- id: user-service # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates: # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求

我们将符合Path 规则的一切请求,都代理到 uri参数指定的地址。

本例中,我们将 /user/**开头的请求,代理到lb://userservice,lb是负载均衡,根据服务名拉取服务列表,实现负载均衡。

总结:搭建步骤
①引入nacos和gateway依赖
②配置application.yml,包括服务基本信息、nacos地址、路由
③路由信息包括:路由id、路由目标(uri)、路由断言(predicates)、路由过滤器(filters)

5.2 断言工厂

如:上面我们使用的path,是断言工厂中的一个。下面还有其他的:

  • After(是某个时间点后的请求)
  • Before(某个节点之前)
  • Between(是某两个时间点之前的请求)
  • Cookie(请求必须包含某些cookie)
  • Header(请求必须包含某些header)
  • Host(请求必须是访问某个host(域名))
  • Method(请求方式必须是指定方式)
  • Path(请求路径必须符合指定规则)
  • Query(请求参数必须包含指定参数)
  • RemoteAddr(请求者的ip必须是指定范围)
  • Weight(权重处理)

5.3 过滤器工厂

修改application.yml配置文件即可
需求:给所有进入userservice的请求添加一个请求头:Truth=itcast is freaking awesome!

spring:cloud:gateway:routes:- id: user-service uri: lb://userservice predicates: - Path=/user/** filters: # 过滤器- AddRequestHeader=Truth, Itcast is freaking awesome! # 添加请求头#default-filters: # 默认过滤项# - AddRequestHeader=Truth, Itcast is freaking awesome! 

当前过滤器写在userservice路由下,因此仅仅对访问userservice的请求有效。

5.4 全局过滤器

在filter中编写自定义逻辑,可以实现下列功能:

  • 登录状态判断
  • 权限校验
  • 请求限流等

自定义全局过滤器:

需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:

  • 参数中是否有authorization,
  • authorization参数值是否为admin
    如果同时满足则放行,否则拦截
@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.获取请求参数MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();// 2.获取authorization参数String auth = params.getFirst("authorization");// 3.校验if ("admin".equals(auth)) {// 放行return chain.filter(exchange);}// 4.拦截// 4.1.禁止访问,设置状态码exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);// 4.2.结束处理return exchange.getResponse().setComplete();}
}

5.5 跨域问题

跨域问题:

域名、端口、协议三者任一一个不同
No access control allow origin

直接通过配置文件解决跨域问题:

spring:cloud:gateway:# 。。。globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:'[/**]':allowedOrigins: # 允许哪些网站的跨域请求 - "http://localhost:8090"allowedMethods: # 允许的跨域ajax的请求方式- "GET"- "POST"- "DELETE"- "PUT"- "OPTIONS"allowedHeaders: "*" # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期

相关文章:

SpringCloud全家桶— — 【1】eureka、ribbon、nacos、feign、gateway

SpringCloud全家桶— — 组件搭建 1 Eureka 1.1 Eureka-server 创建eureka-server的SpringBoot项目 ①导入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId…...

【线程安全篇】

线程安全之原子性问题 x &#xff0c;在字节码文件中对应多个指令&#xff0c;多个线程在运行多个指令时&#xff0c;就存在原子性、可见性问题 赋值 多线程场景下&#xff0c;一个指令如果包含多个字节码指令&#xff0c;那么就不再是原子操作。因为赋值的同时&#xff0c…...

错误:EfficientDet网络出现“No boxes to NMS“并且mAP:0.0的解决方案

近日&#xff0c;在使用谷歌新推出来的一个网络EfficientDet进行目标检测训练自己的数据集的时候&#xff0c;出现了如下错误&#xff1a; 其中项目开源地址是&#xff1a;https://github.com/toandaominh1997/EfficientDet.Pytorch 上面截图中的1和2代表我的类别名称。读者可…...

python的opencv操作记录13——区域生长及分水岭算法

文章目录图像区域基本算法——形态学运算腐蚀与膨胀开运算与闭运算opencv中的形态学运算距离计算——distanceTransform函数连通域连通的定义计算连通域——connectedComponents连通域实验基于区域的分割区域生长算法自定义一个最简单区域生长算法实现区域分割一般区域分割open…...

一文看懂网上下单的手机流量卡为什么归属都是随机的!

最近很多网上下单的小伙伴们心中似乎都有一个疑问。那就是网上很多手机卡、流量卡都不能自选号码和归属地&#xff0c;就算能自选号码&#xff0c;归属地也是随机的而且很多都不会跟你说具体的城市&#xff0c;这是为什么呢&#xff1f;莫非其中有什么不可告人的秘密吗?小伙伴…...

python Pytest生成alluer测试报告的完整教程

1.下载allure包到本地&#xff0c;解压 网上很多资料&#xff0c;这边不提供了 2.配置环境变量 将上面解压后bin文件的路径复制&#xff0c;添加到环境变量Path下 3.验证环境变量配置是否功 在cmd中输入allure&#xff0c;回车 。查看allure是否成功&#xff1a; 4.pyc…...

4-spring篇

ApplicationContext refresh的流程 12个步骤 prepareRefresh 这一步创建和准备了Environment对象&#xff0c;并赋值给了ApplicationContext的成员变量 要理解Environment对象的作用 obtainFreshBeanFactory ApplicationContext 里面有一个成员变量&#xff0c;Beanfactory b…...

提升 Web 应用程序的性能:如何使用 JavaScript 编写缓存服务

缓存是一种重要的优化技术&#xff0c;用于加速数据访问和降低服务器负载。缓存存储经常访问的数据&#xff0c;以便在需要时可以快速检索。在本文中&#xff0c;我们将探索如何使用简单的数据结构在 JavaScript 中编写缓存服务。 编码缓存服务的第一步是定义将用于访问缓存的…...

供应商绩效管理指南:挑战、考核指标与管理工具

管理和优化供应商绩效既关键又具有挑战性。要知道价格并不是一切&#xff0c;如果你的供应商在商定的价格范围内向你开具发票&#xff0c;但服务达不到标准或货物不合格&#xff0c;你也无法达到节约成本的目标。 供应商绩效管理可以深入了解供应商可能带来的风险&#xff0c…...

干货文稿|详解深度半监督学习

分享嘉宾 | 范越文稿整理 | William嘉宾介绍Introduction to Semi-Supervised Learning传统机器学习中的主流学习方法分为监督学习&#xff0c;无监督学习和半监督学习。这里存在一个是问题是为什么需要做半监督学习&#xff1f;首先是希望减少标注成本&#xff0c;因为目前可以…...

信箱|邮箱系统

技术&#xff1a;Java、JSP等摘要&#xff1a;在经济全球化和信息技术飞速发展的今天&#xff0c;通过邮件收发进行信息传递已经成为主流。目前&#xff0c;基于B/S&#xff08;Browser/Server&#xff09;模式的MIS&#xff08;Management information system&#xff09;日益…...

JS数组拓展

1、Array.from Array.from 方法用于将两类对象转为真正的数组&#xff1a; 类似数组的对象,所谓类似数组的对象&#xff0c;本质特征只有一点&#xff0c;即必须有length属性。 因此&#xff0c;任何有length属性的对象&#xff0c;都可以通过Array.from方法转为数组 和 可遍历…...

一道很考验数据结构与算法的功底的笔试题:用JAVA设计一个缓存结构

我在上周的笔试中遇到了这样一道题目&#xff0c;觉得有难度而且很考验数据结构与算法的功底&#xff0c;因此Mark一下。 需求说明 设计并实现一个缓存数据结构: 该数据结构具有以下功能&#xff1a; get(key) 如果指定的key存在于缓存中&#xff0c;则返回与该键关联的值&am…...

(10)C#传智:命名空间、String/StringBuilder、指针、继承New(第10天)

内容开始多了&#xff0c;慢品慢尝才有滋味。 一、命名空间namespace 用于解决类重名问题&#xff0c;可以看作类的文件夹. 若代码与被使用的类&#xff0c;与当前的namespace相同&#xff0c;则不需要using. 若namespace不同时&#xff0c;调用的方法&#xff1a…...

基于Jetson Tx2 Nx的Qt、树莓派等ARM64架构的Ptorch及torchvision的安装

前提 已经安装好了python、pip及最基本的依赖库 若未安装好点击python及pip安装请参考这篇博文 https://blog.csdn.net/m0_51683386/article/details/129320492?spm1001.2014.3001.5502 特别提醒 一定要先根据自己板子情况&#xff0c;找好python、torch、torchvision的安…...

MySQL存储引擎详解及对比和选择

什么是存储引擎&#xff1f; MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术&#xff0c;你能够获得额外的速度或者功能&#xff0c;从而改善…...

【推拉框-手风琴】vue3实现手风琴效果的组件

简言 在工作时有时会用到竖形手风琴效果的组件。 在此记录下实现代码和实现思路。 手风琴实现 结构搭建 搭建结构主要实现盒子间的排列效果。 用flex布局或者其他布局方式将内容在一行排列把每一项的内容和项头用盒子包裹&#xff0c; 内容就是这一项要展示的内容&#xf…...

滑动窗口最大值:单调队列

239. 滑动窗口最大值 难度困难2154收藏分享切换为英文接收动态反馈 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例…...

负载均衡算法

静态负载均衡 轮询 将请求按顺序轮流地分配到每个节点上&#xff0c;不关心每个节点实际的连接数和当前的系统负载。 优点&#xff1a;简单高效&#xff0c;易于水平扩展&#xff0c;每个节点满足字面意义上的均衡&#xff1b; 缺点&#xff1a;没有考虑机器的性能问题&…...

C语言数组二维数组

C 语言支持数组数据结构&#xff0c;它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据&#xff0c;但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量&#xff0c;比如 runoob0、runoob1、…、runoob99&#xff0c;而是…...

7年测试工程师,裸辞掉17K的工作,想跳槽找更好的,还是太高估自己了....

14年大学毕业后&#xff0c;在老师和朋友的推荐下&#xff0c;进了软件测试行业&#xff0c;这一干就是7年时间&#xff0c;当时大学本来就是计算机专业&#xff0c;虽然专业学的一塌糊涂&#xff0c;但是当年的软件测试属于新兴行业&#xff0c;人才缺口比较大&#xff0c;而且…...

企业为什么需要做APP安全评估?

近几年新型信息基础设施建设和移动互联网技术的不断发展&#xff0c;移动APP数量也呈现爆发式增长&#xff0c;进而APP自身的“脆弱性”也日益彰显&#xff0c;这对移动用户的个人信息及财产安全带来巨大威胁和挑战。在此背景下&#xff0c;国家出台了多部法律法规&#xff0c;…...

重回利润增长,涪陵榨菜为何能跑赢周期?

2022年消费市场持续低迷&#xff0c;疫情寒冬之下&#xff0c;不少食品快消企业均遭遇严重的业绩下滑&#xff0c;但一年里不断遭遇利空打击的“榨菜茅”涪陵榨菜&#xff0c;不仅安然躲过“酸菜劫”、走出“钠”争议&#xff0c;而且顺利将产品价格提起来&#xff0c;并在寒冬…...

这6个高清图片素材库,马住,马住~

网上找的图片素材清晰度不够&#xff0c;版权不明确怎么办。看看这几个可商用图片素材网站&#xff0c;解决你的所有图片需求&#xff0c;高清无水印&#xff0c;赶紧马住&#xff01; 1、菜鸟图库 美女图片|手机壁纸|风景图片大全|高清图片素材下载网 - 菜鸟图库 ​ 网站素材…...

绝对零基础的C语言科班作业(期末模拟考试)

编程题&#xff08;共10题&#xff1b; 共100.0分&#xff09;模拟1&#xff08;输出m到n的素数&#xff09;从键盘输入两个整数[m,n], 输出m和n之间的所有素数。 输入样例&#xff1a;3&#xff0c;20输出样例&#xff1a;3 5 7 11 13 17 19 &#xff08;输出数据之间用空格间…...

注解开发定义bean

注解开发定义bean 使用Component定义bean在核心配置文件中通过组件扫描加载bean&#xff0c;需要指定扫描包的范围 当然也可以使用Component的衍生注解&#xff0c;可以更加形象的表示 纯注解的开发模式 使用java类来代替了以前的 配置文件&#xff0c;在java类中&#xff…...

剑指 Offer 19. 正则表达式匹配

摘要 剑指 Offer 19. 正则表达式匹配 请实现一个函数用来匹配包含. 和*的正则表达式。模式中的字符.表示任意一个字符&#xff0c;而*表示它前面的字符可以出现任意次&#xff08;含0次&#xff09;。在本题中&#xff0c;匹配是指字符串的所有字符匹配整个模式。例如&#x…...

CSS——学成在线案例

&#x1f353;个人主页&#xff1a;bit.. &#x1f352;系列专栏&#xff1a;Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 HTML和CSS3 目录 1.案例准备工作 2.CSS属性书写顺序&#xff08;重点&#xff09; 3.页面布局整体思路 4.头部的制作​编辑 5.banner制作…...

元数据的类型

元数据通常分为三种类型&#xff1a;业务元数据、技术元数据和操作元数据。这些类别使人们能够理解属于元数据总体框架下的信息范围&#xff0c;以及元数据的产生过程。也就是说&#xff0c;这些类别也可能导致混淆&#xff0c;特别是当人们对一组元数据属于哪个类别或应该由谁…...

LEAP模型的能源环境发展、碳排放建模预测及不确定性分析

LEAP&#xff08;Long Range Energy Alternatives Planning System/ Low emission analysis platform&#xff0c;长期能源可替代规划模型&#xff09;是一种自下而上的能源-环境核算工具&#xff0c;由斯德哥尔摩环境研究所和美国波士顿大学联合研发。该模型与情景分析法紧密结…...

青岛网站设计价格/公司个人怎么做网络推广

我在reactjs中使用formik,有一个onsubmit方法,它有一个setsubmitting参数。我想把它传给我的“然后”方法,但不知道怎么做。onSubmit{(values, { setSubmitting, setErrors }) > {setSubmitting(true);// how can I get away from doing this.const submitting setSubmitti…...

大连城市建设档案馆官方网站/seo搜索引擎优化工作内容

1.介绍 Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。使用Config Server&#xff0c;您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同&#xff0c;因此它们与Spring应用程序非常契…...

手机与电脑网站制作/永久不收费免费的聊天软件

1、从服务器上下载文件 scp usernameservername:/path/filename /var/www/local_dir&#xff08;本地目录&#xff09;拷贝std文件夹 -r 递归 sudo scp -r ngi192.168.113.183:/home/ngi/IdeaProjects/ai-sport/data/STD /home/roy2上传本地文件到服务器 scp /path/filename u…...

wordpress批量增加用户/北京百度推广代理

这几天在修改canal, 连接mysql和maria接收到的event有所区别 拿一个简单的insert sql来举例 mysql 会有以下几个event写入到binlog里 1.ANONYMOUS_GTID_LOG_EVENT2.QUERY_EVENTheader { version: 1 logfileName: "20170105-162017-bin.000001" logfileOffset: 192…...

刘涛做的婴儿玩具网站/线下推广怎么做

为什么80%的码农都做不了架构师&#xff1f;>>> MySQL安装文件分为两种&#xff0c;一种是msi格式的&#xff0c;一种是zip格式的。如果是msi格式的可以直接点击安装&#xff0c;按照它给出的安装提示进行安装&#xff08;相信大家的英文可以看懂英文提示&#xff…...

济南正规做网站公司/磁力猫

可以使用kubectl、客户端库方式对REST API的访问&#xff0c;Kubernetes的普通账户和Service帐户都可以实现授权访问API。API的请求会经过多个阶段的访问控制才会被接受处理&#xff0c; 其中包含认证、授权以及准入控制&#xff08;Admission Control&#xff09;等。如下图所…...