Spring Cloud Consul 4.1.1

该项目通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型习惯用法,为 Spring Boot 应用程序提供 Consul 集成。通过一些简单的注释,您可以快速启用和配置应用程序内的常见模式,并使用基于 Consul 的组件构建大型分布式系统。提供的模式包括服务发现、控制总线和配置。智能路由和客户端负载均衡、断路器是通过与其他 Spring Cloud 项目集成来提供的。

快速开始

本快速入门逐步介绍如何使用 Spring Cloud Consul 进行服务发现和分布式配置。

首先,在您的计算机上运行 Consul Agent。然后您可以访问它并将其用作 Spring Cloud Consul 的服务注册表和配置源。

发现客户端使用情况

要在应用程序中使用这些功能,您可以将其构建为依赖于 spring-cloud-consul-core 的 Spring Boot 应用程序。添加依赖项最方便的方法是使用 Spring Boot 启动器 org.springframework.cloud:spring-cloud-starter-consul-discovery 。我们建议使用依赖管理和 spring-boot-starter-parent 。以下示例显示了典型的 Maven 配置:

<project>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>{spring-boot-version}</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

现在您可以创建一个标准的 Spring Boot 应用程序,例如以下 HTTP 服务器:

@SpringBootApplication
@RestController
public class Application {

    @GetMapping("/")
    public String home() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

当此 HTTP 服务器运行时,它会连接到在默认本地 8500 端口运行的 Consul Agent。要修改启动行为,您可以使用 application.properties 更改 Consul Agent 的位置,如下例所示:

spring:
  cloud:
    consul:
      host: localhost
      port: 8500

注意:可能踩坑 SpringCloud 集成consul,消费者报I/O error on GET request for...

您现在可以使用 DiscoveryClient 、 @LoadBalanced RestTemplate 或 @LoadBalanced WebClient.Builder 从 Consul 检索服务和实例数据,如以下示例所示:

@Autowired
private DiscoveryClient discoveryClient;

public String serviceUrl() {
    List<ServiceInstance> list = discoveryClient.getInstances("STORES");
    if (list != null && list.size() > 0 ) {
        return list.get(0).getUri().toString();
    }
    return null;
}

分布式配置使用

要在应用程序中使用这些功能,您可以将其构建为依赖于 spring-cloud-consul-core 和 spring-cloud-consul-config 的 Spring Boot 应用程序。添加依赖项最方便的方法是使用 Spring Boot 启动器: org.springframework.cloud:spring-cloud-starter-consul-config 。我们建议使用依赖管理和 spring-boot-starter-parent 。以下示例显示了典型的 Maven 配置:

<project>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>{spring-boot-version}</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-consul-config</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

现在您可以创建一个标准的 Spring Boot 应用程序,例如以下 HTTP 服务器:

@SpringBootApplication
@RestController
public class Application {

    @GetMapping("/")
    public String home() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

如果您使用 Spring Cloud Consul Config,则需要设置 spring.config.import 属性才能绑定到 Consul。

安装consul

参考官网:Install Consul

Consul Agent 客户端必须可用于所有 Spring Cloud Consul 应用程序。默认情况下,代理客户端预计位于 localhost:8500 。有关如何启动代理客户端以及如何连接到 Consul 代理服务器集群的详细信息,请参阅代理文档。根据上面的文档启动开发代理。


这将在端口 8500 上以服务器模式启动代理,用户界面位于 localhost:8500

windows上可以配置一个服务,对Consul数据进行持久化

在consul的安装目录下,新建一个mydata文件夹,文件夹名字无要求

新建一个.bat脚本文件

参考:

@echo.服务启动......  

@echo off  
@sc create Consul binpath= "D:\devSoft\consul_1.17.0_windows_386\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect  1  -data-dir D:\devSoft\consul_1.17.0_windows_386\mydata   "
@net start Consul
@sc config Consul start= AUTO  
@echo.Consul start is OK......success
@pause

后续consul的配置数据会保存进mydata文件夹,重启也不会丢失

使用 Consul 进行服务发现

服务发现是基于微服务的架构的关键原则之一。尝试手动配置每个客户端或某种形式的约定可能非常困难,而且可能非常脆弱。 Consul 通过 HTTP API 和 DNS 提供服务发现服务。 Spring Cloud Consul 利用 HTTP API 进行服务注册和发现。这不会阻止非 Spring Cloud 应用程序利用 DNS 接口。 Consul Agents 服务器运行在集群中,通过 gossip 协议进行通信并使用 Raft 共识协议。

如何激活

要激活 Consul 服务发现,请使用带有组 org.springframework.cloud 和工件 ID spring-cloud-starter-consul-discovery 的启动器。有关使用当前 Spring Cloud 发布系列设置构建系统的详细信息,请参阅 Spring Cloud 项目页面。

向Consul注册

当客户端向 Consul 注册时,它会提供有关自身的元数据,例如主机和端口、id、名称和标签。默认情况下,Consul 会每 10 秒创建一次 HTTP 检查来检查 /actuator/health 端点。如果健康检查失败,服务实例将被标记为危险的。

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}

如果 Consul 客户端位于 localhost:8500 以外的位置,则需要配置来定位客户端。例子:

spring:
  cloud:
    consul:
      host: localhost
      port: 8500

如果您使用 Spring Cloud Consul Config,并且您设置了 spring.cloud.bootstrap.enabled=true 或 spring.config.use-legacy-processing=true 或使用 spring-cloud-starter-bootstrap ,那么上述值需要放在 bootstrap.yml 而不是 application.yml 。

        默认服务名称、实例 ID 和端口取自 Environment ,分别为 ${spring.application.name} 、Spring 上下文 ID 和 ${server.port} 。

要禁用 Consul Discovery Client,您可以将 spring.cloud.consul.discovery.enabled 设置为 false 。当 spring.cloud.discovery.enabled 设置为 false 时,Consul Discovery Client 也将被禁用。

要禁用服务注册,您可以将 spring.cloud.consul.discovery.register 设置为 false 。

将管理注册为单独的服务

当管理服务器端口设置为与应用程序端口不同的端口时,通过设置 management.server.port 属性,管理服务将注册为与应用程序服务不同的单独服务。例如:

application.yml 应用程序.yml

spring:
  application:
    name: myApp
management:
  server:
    port: 4452

以上配置将注册以下2个服务:

申请服务:

ID: myApp
Name: myApp

管理服务:

ID: myApp-management
Name: myApp-management

管理服务将从应用程序服务继承其 instanceId 和 serviceName 。例如:

spring:
  application:
    name: myApp
management:
  server:
    port: 4452
spring:
  cloud:
    consul:
      discovery:
        instance-id: custom-service-id
        serviceName: myprefix-${spring.application.name}

以上配置将注册以下2个服务:

申请服务:

ID: custom-service-id
Name: myprefix-myApp

管理服务:

ID: custom-service-id-management
Name: myprefix-myApp-management

HTTP 健康检查

Consul 实例的健康检查默认位于“/actuator/health”,这是 Spring Boot Actuator 应用程序中健康端点的默认位置。即使对于 Actuator 应用程序,如果您使用非默认上下文路径或 servlet 路径(例如 server.servletPath=/foo )或管理端点路径(例如 management.server.servlet.context-path=/admin ),您也需要更改此设置。

Consul 用于检查健康端点的时间间隔也可以配置。 “10s”和“1m”分别代表10秒和1分钟。

application.yml 应用程序.yml

spring:
  cloud:
    consul:
      discovery:
        healthCheckPath: ${management.server.servlet.context-path}/actuator/health
        healthCheckInterval: 15s

您可以通过设置 spring.cloud.consul.discovery.register-health-check=false 完全禁用 HTTP 运行状况检查。

应用标头

标头可应用于健康检查请求。例如,如果您尝试注册使用 Vault Backend 的 Spring Cloud Config 服务器:

根据 HTTP 标准,每个标头可以有多个值,在这种情况下,可以提供一个数组:

spring:
  cloud:
    consul:
      discovery:
        health-check-headers:
          X-Config-Token:
            - "6442e58b-d1ea-182e-cfa5-cf9cddef0722"
            - "Some other value"

TTL健康检查

可以使用 Consul TTL 检查代替默认配置的 HTTP 检查。主要区别在于应用程序向 Consul 代理发送心跳信号,而不是 Consul 代理向应用程序发送请求。

还可以配置应用程序发送 ping 的时间间隔。 “10s”和“1m”分别代表10秒和1分钟。默认值为 30 秒。

此示例说明了上述内容(有关更多选项,请参阅附录页面中的 spring.cloud.consul.discovery.heartbeat.* 属性)。

application.yml 

spring:
  cloud:
    consul:
      discovery:
        heartbeat:
          enabled: true
          ttl: 10s
TTL申请状态

对于 Spring Boot Actuator 应用程序,状态是根据其可用的运行状况端点确定的。当运行状况端点不可用(禁用或不是 Spring Boot Actuator 应用程序)时,它假定应用程序运行状况良好。

查询健康端点时,默认使用根健康组。可以通过设置以下属性来使用不同的健康组:

spring:
  cloud:
    consul:
      discovery:
        heartbeat:
          actuator-health-group: <your-custom-group-goes-here>
自定义 TTL 应用状态

如果你想配置自己的应用状态机制,只需实现 ApplicationStatusProvider 接口即可

MyCustomApplicationStatusProvider.java

@Bean
public class MyCustomApplicationStatusProvider implements ApplicationStatusProvider {
	public CheckStatus currentStatus() {
        return yourMethodToDetermineAppStatusGoesHere();
    }
}

查找服务

使用负载均衡器

Spring Cloud 支持 Feign(REST 客户端构建器),还支持 Spring RestTemplate 使用逻辑服务名称/ids 而不是物理 URL 查找服务。 Feign 和发现感知的 RestTemplate 都利用 Spring Cloud LoadBalancer 进行客户端负载平衡。

如果您想使用 RestTemplate 访问服务 STORES,只需声明:

@LoadBalanced
@Bean
public RestTemplate loadbalancedRestTemplate() {
     return new RestTemplate();
}

并像这样使用它(注意我们如何使用 Consul 的 STORES 服务名称/id 而不是完全限定的域名):

@Autowired
RestTemplate restTemplate;

public String getFirstProduct() {
   return this.restTemplate.getForObject("https://STORES/products/1", String.class);
}

如果您在多个数据中心拥有 Consul 集群,并且想要访问另一个数据中心中的服务,仅服务名称/ID 是不够的。在这种情况下,您使用属性 spring.cloud.consul.discovery.datacenters.STORES=dc-west ,其中 STORES 是服务名称/id, dc-west 是 STORES 服务所在的数据中心。

使用 Consul 进行分布式配置

Consul 提供了一个键/值存储来存储配置和其他元数据。 Spring Cloud Consul Config 是配置服务器和客户端的替代方案。配置在特殊的“引导”阶段加载到 Spring 环境中。默认情况下,配置存储在 /config 文件夹中。多个 PropertySource 实例是根据应用程序的名称和模仿 Spring Cloud Config 解析属性顺序的活动配置文件创建的。例如,名称为“testApp”且配置文件为“dev”的应用程序将创建以下属性源:

config/testApp,dev/
config/testApp/
config/application,dev/
config/application/

目前是以,分割的,可以更改

spring:
  application:
    name: cloud-payment-service
    ####Spring Cloud Consul for Service Discovery
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
      config:
        profile-separator: '-' # default value is ",",we update '-'
        format: YAML

# config/cloud-payment-service/data
#       /cloud-payment-service-dev/data
#       /cloud-payment-service-prod/data

最具体的属性来源位于顶部,最不具体的属性来源位于底部。 config/application 文件夹中的属性适用于所有使用consul进行配置的应用程序。 config/testApp 文件夹中的属性仅适用于名为“testApp”的服务实例。


目前,配置是在应用程序启动时读取的。发送 HTTP POST 到 /refresh 将导致配置重新加载。 Config Watch 还将自动检测更改并重新加载应用程序上下文。

 如何激活

要开始使用 Consul 配置,请使用带有组 org.springframework.cloud 和工件 ID spring-cloud-starter-consul-config 的启动器。有关使用当前 Spring Cloud 发布系列设置构建系统的详细信息,请参阅 Spring Cloud 项目页面。

配置数据导入

Spring Boot 2.4 引入了一种通过 spring.config.import 属性导入配置数据的新方法。现在这是从 Consul 获取配置的默认方式。


要选择连接到 Consul,请在 application.properties 中设置以下内容:

spring.config.import=optional:consul:

这将连接到默认位置“http://localhost:8500”的 Consul Agent。删除 optional: 前缀将导致 Consul Config 在无法连接到 Consul 时失败。要更改 Consul Config 的连接属性,请设置 spring.cloud.consul.host 和 spring.cloud.consul.port 或将主机/端口对添加到 spring.config.import 语句,例如 spring.config.import=optional:consul:myhost:8500


Consul Config 将尝试根据 spring.cloud.consul.config.name (默认为 spring.application.name 属性的值)和 spring.cloud.consul.config.default-context (默认为 < b3>)。如果您想指定上下文而不是使用计算的上下文,则可以将该信息添加到 spring.config.import 语句中。

定制

Consul Config 可以使用以下属性进行定制:

spring:
  cloud:
    consul:
      config:
        enabled: true
        prefix: configuration
        defaultContext: apps
        profileSeparator: '::'

如果您设置了 spring.cloud.bootstrap.enabled=true 或 spring.config.use-legacy-processing=true ,或者包含 spring-cloud-starter-bootstrap ,那么上述值将需要放置在 bootstrap.yml 而不是application.yml

  • enabled 将此值设置为“false”会禁用 Consul Config

  • prefix 设置配置值的基本文件夹

  • defaultContext 设置所有应用程序使用的文件夹名称

  • profileSeparator 设置用于分隔属性源中的配置文件名称和配置文件的分隔符的值

配置观察

Consul Config Watch 利用 consul 监视键前缀的能力。 Config Watch 进行阻塞 Consul HTTP API 调用,以确定当前应用程序的任何相关配置数据是否已更改。如果有新的配置数据,则会发布刷新事件。这相当于调用 /refresh 执行器端点。


要更改调用 Config Watch 的频率,请更改 spring.cloud.consul.config.watch.delay 。默认值为 1000,单位为毫秒。延迟是上一次调用结束和下一次调用开始之间的时间量。


禁用配置监视集 spring.cloud.consul.config.watch.enabled=false 。


Watch使用 Spring TaskScheduler 来安排对 consul 的调用。默认情况下,它是一个 ThreadPoolTaskScheduler , poolSize 为 1。要更改 TaskScheduler ,请创建一个 TaskScheduler 类型的 bean,命名为 ConsulConfigAutoConfiguration.CONFIG_WATCH_TASK_SCHEDULER_NAME 常数。

YAML 或带有配置的属性

与单独的键/值对相比,以 YAML 或属性格式存储属性块可能更方便。将 spring.cloud.consul.config.format 属性设置为 YAML 或 PROPERTIES 。例如使用 YAML:

spring:
  cloud:
    consul:
      config:
        format: YAML

如果您设置了 spring.cloud.bootstrap.enabled=true 或 spring.config.use-legacy-processing=true ,或者包含 spring-cloud-starter-bootstrap ,那么上述值将需要放置在 bootstrap.yml

 快速失败

在某些情况下(例如本地开发或某些测试场景),如果 consul 不可用于配置,则可能很方便不会失败。设置 spring.cloud.consul.config.fail-fast=false 将导致配置模块记录警告而不是抛出异常。这将允许应用程序继续正常启动。

如果您设置了 spring.cloud.bootstrap.enabled=true 或 spring.config.use-legacy-processing=true ,或者包含 spring-cloud-starter-bootstrap ,那么上述值将需要放置在 bootstrap.yml

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

银河麒麟v10 重装系统恢复原home分区

现象&#xff1a;系统还原后在锁屏状态下输入密码后闪退回锁屏 ctrl alt f1切到命令行模式&#xff0c;查看/home目录下的用户文件夹里无文件 1、blkid找到data分区的uuid和设备编号&#xff0c;记录下来&#xff1b; 2、sudo mount /dev/sda5 3、sudo vi /etc/fstab&#xf…

JAVA中类和对象(承接上次的补充)

目录&#xff1a; 一.static修饰成员方法 二.static成员变量初始化 三.代码块 一.static修饰成员方法: 1.一般类中的数据成员都设置为 private &#xff0c;而成员方法设置为 public &#xff0c; 问&#xff1a;那设置之后&#xff0c;Student类中&#xff0c;被Student修饰…

数据结构——01-抽奖数人-链表-实验题目与解答

数据结构抽奖数人链表实验题目与解答 一、**实验题目** 抽奖游戏&#xff1a; n个人围成一圈&#xff0c;由第一个人开始&#xff0c;依次报数&#xff0c;数到第m人&#xff0c;便抽出来作为中奖人&#xff0c;然后从他的下一个人数起&#xff0c;数到第m人&#xff0c;再抽…

VALSE 2024合合信息 | 文档解析与向量化技术加速多模态大模型训练与应用

第十四届视觉与学习青年学者研讨会&#xff08;VALSE 2024&#xff09;近期在重庆悦来国际会议中心圆满举行&#xff0c;由中国人工智能学会&#xff08;CAAI&#xff09;、中国图象图形学会&#xff08;CSIG&#xff09;、中国民族贸易促进会主办&#xff0c;重庆邮电大学承办…

goconvey测试框架的使用

尽管Golang已经内置了功能强大的testing包&#xff0c;其易用性令人称赞。然而&#xff0c;当我们希望更直观地处理和判断测试结果时&#xff0c;结合使用goconvey能为我们提供极大的便利。goconvey不仅为我们提供了丰富的断言函数&#xff0c;这些函数还极大地方便了我们在进行…

Web测试是在测什么?容易被忽视的小细节总结!

随着Internet和Intranet/Extranet的快速增长&#xff0c;Web已经对商业、工业、银行、财政、教育、政府和娱乐及我们的工作和生活产生了深远的影响。许多传统的信息和数据库系统正在被移植到互联网上&#xff0c;电子商务迅速增长&#xff0c;早已超过了国界。范围广泛的、复杂…

C# XPTable in .net6(XPTable控件使用说明八)

经过作者schoetbi、armin-pfaeffle的努力&#xff0c;XPTable已经可以在 winform .net6 .net8的环境下使用&#xff0c;版本升级到了2.0&#xff0c;这样就可以在winform下同时使用XPTABLE和EFcore, 这样就可以解决大部分的场景了。

网络工程师----第二十八天

计算机基础 第五章&#xff1a;运输层 运输层的两个协议&#xff1a; 1、传输控制协议TCP&#xff1a; TCP最主要的特点&#xff1a; (1)TCP是面向连接的。应用程序在使用TCP协议之前&#xff0c;必须先建立连接。在传送数据完毕后&#xff0c;必须释放已经建立的TCP连接。…

【数据分析面试】43.寻找给小费最多的客人(Python:字典用法)

题目&#xff1a; 寻找给小费最多的客人 &#xff08;Python) 给定两个非空列表user_ids和tips&#xff0c;编写一个名为most_tips的函数&#xff0c;用于找到给小费最多的客户。 示例&#xff1a; 输入&#xff1a; user_ids [103, 105, 105, 107, 106, 103, 102, 108, 1…

【基于 PyTorch 的 Python 深度学习】5 机器学习基础(1)

前言 文章性质&#xff1a;学习笔记 &#x1f4d6; 学习资料&#xff1a;吴茂贵《 Python 深度学习基于 PyTorch ( 第 2 版 ) 》【ISBN】978-7-111-71880-2 主要内容&#xff1a;根据学习资料撰写的学习笔记&#xff0c;该篇主要介绍了机器学习的基本任务、机器学习的一般流程&…

5G消息和5G阅信的释义与区别 | 赛邮科普

5G消息和5G阅信的释义与区别 | 赛邮科普 在 5G 技术全面普及的当下&#xff0c;历史悠久的短信服务也迎来了前所未有的变革。5G 阅信和 5G 消息就是应运而生的两种短信形态&#xff0c;为企业和消费者带来更加丰富的功能和更加优质的体验。 这两个产品名字和形态都比较接近&am…

有奖调研 | OpenSCA开源社区用户调研问卷

调研背景&#xff1a; 亲爱的OpenSCA开源社区用户&#xff0c;感谢您一路以来的支持与相伴。随着OpenSCA开源社区的不断发展&#xff0c;我们持续专注安全开发与开源治理实践&#xff0c;为全球用户提供一站式审查治理、SaaS云分析和精准情报预警的开源数字供应链安全赋能。 为…

【离散数学】偏序关系中盖住关系的求取及格论中有补格的判定(c语言实现)

实验要求 求n的因子函数 我们将n的因子存入数组中&#xff0c;n的因子就是可以整除n的数&#xff0c;所以我们通过一个for循环来求。返回因子个数。 //求n的因子,返回因子个数 int factors(int arr[], int n) {int j 0;for (int i 1; i < n; i){if (n % i 0){arr[j] i…

财务风险管理:背后真相及应对策略

市场经济蓬勃发展&#xff0c;机遇与风险并存也是市场经济的一项重要特征。而财务状况的好坏影响着一个企业的发展前景&#xff0c;作为市场经济的必然产物&#xff0c;财务风险贯穿于企业的一切生产经营活动中&#xff0c;无法预知也不以人的意志为转移。 一、企业财务风险的特…

unordered_set(无序容器)

特点 它可以存储不重复的元素集合。容器的特点是内部元素没有特定的顺序&#xff0c;因此查找、插入和删除操作的平均时间复杂度是O(1)。unordered_set是基于哈希表实现的&#xff0c;所以在使用时需要提供一个哈希函数和相等函数。 成员函数 查找&#xff08;只能查找元素是否…

最长数字子串-第12届蓝桥杯国赛Python真题解析

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第62讲。 最长数字子串&…

软件验收测试包括哪些类型

在软件开发过程中&#xff0c;验收测试是一个至关重要的环节&#xff0c;它确保了软件的质量、功能性和用户体验符合预期。验收测试主要关注于软件是否满足用户需求和业务目标&#xff0c;从而确保软件能够顺利交付并投入使用。本文将介绍软件验收测试的主要类型及其关键要素。…

display:flex align-items:center无效的不一样的解决思路

写H5的时候&#xff0c;希望两个元素在div中垂直居中&#xff0c;但是设置align-items:center无效&#xff0c;最终排查原因是引入三方css影响了align-items:center。 具体分析如下&#xff0c;想让搜索图标和input在div里水平居中&#xff1a; 布局如下&#xff1a; <div…

JAVA实验项目(一):JAVA面向对象特征性实验

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

月入8.5k,计算机应届生转行网优,就业难,不妨另辟蹊径!

随着2024年毕业生人数的预计达到惊人的1179万&#xff0c;就业市场的竞争愈发激烈。作为即将踏入社会的毕业生&#xff0c;如何做好准备&#xff0c;减轻自己的就业压力&#xff0c;成为了摆在我们面前的一大难题。 今天主人公是一位刚毕业的22岁大学生小L&#xff0c;河南郑州…