SpringBoot 3.1现已推出,惊艳新特性带来前所未有的开发体验

news2024/12/22 3:27:48

一、介绍

1.1 新特性概述

经过半年的沉淀 Spring Boot 3.1于2023年5月18日正式发布了,带来了许多令人兴奋的新特性和改进。本篇博客将详细介绍Spring Boot 3.1的新特性、升级说明以及核心功能的改进。

同时,2.6.x 版本线已经停止维护了,最新支持版本如下图所示:

下图时间轴展示了2.7.x 这也是目前唯一正在维护的 2.x 版本线了,商业支持的版本也只有 2.5.x 了。

1.2 最低环境要求

Spring Boot 3.1.0 需要Java 17,并且兼容 Java 20(包括 Java 20)。 还需要Spring Framework 6.0.9或更高版本。

为以下构建工具提供显式构建支持:

Spring Boot 支持以下嵌入式 servlet 容器:

GraalVM本地镜像:

可以使用 GraalVM 22.3 或更高版本将 Spring Boot 应用程序转换为本机映像。

可以使用原生构建工具Gradle/Maven 插件或native-imageGraalVM 提供的工具来创建图像。您还可以使用原生图像 Paketo buildpack创建原生图像。

支持以下版本:

二、核心特性

2.1 Apache HttpClient 4 的依赖管理

Spring Framework 6 中删除了RestTemplate对Apache HttpClient 4 的支持,取而代之的是 Apache HttpClient 5。Spring Boot 3.0 包括 HttpClient 4 和 5 的依赖管理。继续使用 HttpClient 4 的应用程序在使用时可能会遇到难以诊断的错误。Spring Boot 3.1 移除了 HttpClient 4 的依赖管理,以鼓励用户转而使用 HttpClient 5。

HttpClient 5Apache HttpComponents中的一个 HTTP 客户端库,可以用来发送 HTTP 请求和接收 HTTP 响应。下面是 HttpClient 5 的简单使用示例:

🌟添加 HttpClient 5 的依赖

在 Maven 项目中,可以通过在 pom.xml 文件中添加以下依赖将 HttpClient 5 添加到项目中:

<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient5</artifactId>
        <version>5.1</version>
    </dependency>
</dependencies>

🌟创建 HttpClient 实例

可以通过以下方式创建 HttpClient 实例:

HttpClient httpClient = HttpClientBuilder.create().build();

🌟创建 HttpGet 请求

可以通过以下方式创建 HttpGet 请求:

HttpGet httpGet = new HttpGet("https://www.example.com/");

🌟发送请求并获取响应

可以通过以下方式发送请求并获取响应:

HttpResponse response = httpClient.execute(httpGet);

🌟处理响应

可以通过以下方式处理响应:

int statusCode = response.getStatusLine().getStatusCode();
String responseBody = EntityUtils.toString(response.getEntity());

其中,response.getStatusLine().getStatusCode() 可以获取响应状态码,EntityUtils.toString(response.getEntity()) 可以获取响应正文。

完整的代码如下:

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        HttpClient httpClient = HttpClientBuilder.create().build();
        HttpGet httpGet = new HttpGet("https://www.example.com/");
        HttpResponse response = httpClient.execute(httpGet);
        int statusCode = response.getStatusLine().getStatusCode();
        String responseBody = EntityUtils.toString(response.getEntity());
        System.out.println("Status code: " + statusCode);
        System.out.println("Response body: " + responseBody);
    }
}

2.2 Servlet 和过滤器注册

ServletRegistrationBean如果注册失败,和类FilterRegistrationBean现在将失败,IllegalStateException而不是记录警告。如果您需要旧的行为,您应该调用setIgnoreRegistrationFailure(true)您的注册 bean。

2.3 Git 提交 ID Maven 插件版本属性

用于覆盖 的版本的属性io.github.git-commit-id:git-commit-id-maven-plugin已更新以与其工件名称保持一致。为了适应这种变化,请git-commit-id-plugin.versiongit-commit-id-maven-plugin.version您的pom.xml

2.4 Hibernate 6.2

Spring Boot 3.1 升级到 Hibernate 6.2。请参阅Hibernate 6.2 迁移指南以了解这对您的应用程序有何影响。

2.5 Jackson 2.15

Spring Boot 3.1 升级到 Jackson 2.15。请参阅Jackson wiki以了解这对您的应用程序有何影响。

2.15 中的一个显着变化是引入了处理限制。要调整这些约束,请定义Jackson2ObjectMapperBuilderCustomizer类似于以下内容:

@Bean 
Jackson2ObjectMapperBuilderCustomizer customStreamReadConstraints() { 
	return (builder) -> builder.postConfigurer((objectMapper) -> objectMapper.getFactory() 
		.setStreamReadConstraints(StreamReadConstraints.builder().maxNestingDepth(2000).build())); 
}

2.6 Mockito 5

Spring Boot 3.1 升级到 Mockito 5,特别是 5.3。请参阅 Mockito 发行说明以了解 Mockito 5.x 系列中的显着变化。
在这里插入图片描述

2.6 Health Group Membership Validation

现在在启动时验证配置的健康组成员身份。如果包含或排除了不存在的健康指标,启动将失败。可以禁用此验证,恢复早期版本的行为,方法是设置management.endpoint.health.validate-group-membershipfalse

三、增强功能

3.1 服务连接

🌟服务连接概括

引入了新的服务连接概念。此类连接在应用程序中由 bean 表示ConnectionDetails。这些 bean 提供了必要的细节来建立与删除服务的连接,并且 Spring Boot 的自动配置已更新为使用ConnectionDetailsbean。当此类 beans 可用时,它们将优先于任何与连接相关的配置属性。与连接本身无关的配置属性,例如控制连接池大小和行为的属性,仍将被使用。

此低级功能旨在作为其他高级功能的构建块,这些功能通过定义ConnectionDetailsbean 自动配置服务连接。

🌟 基于属性的 ConnectionDetails Bean

在没有在其他地方定义适当的 bean 的情况下…ConnectionDetails,Spring Boot 的自动配置已更新为定义自己的基础,由相关配置属性支持。这允许…ConnectionDetails注入而不必处理没有这样的 bean 可用并且需要回退到基于属性的配置的情况。

3.2 测试容器

🌟在开发时使用测试容器

引入了对在开发时使用测试容器管理外部服务的支持。

在开发时使用 Testcontainer 时,可以使用新的 Maven goal( spring-boot:test-run) 和 Gradle task( bootTestRun) 通过测试 main 方法启动应用程序。

Container可以使用新注释导入将 Testcontainers 实例声明为静态字段的类@ImportTestcontainers

测试容器生命周期的管理得到改进,确保容器先初始化,最后销毁。对可重复使用容器的支持也得到了改进。

从方法贡献属性Container @BeanDynamicPropertyRegistry现在可以注入。@DynamicPropertySource这与您在测试中使用的方式类似。有关详细信息,请参阅下图

🌟测试容器服务连接

使用 Testcontainers 时,@DynamicPropertySource通常用于根据容器的设置配置应用程序属性:

@Container
static GenericContainer redis = new GenericContainer(DockerImageName.parse("redis").withTag("4.0.14"));

// …

@DynamicPropertySource
static void redisProperties(DynamicPropertyRegistry registry) {
	registry.add("spring.data.redis.host", redis::getHost);
	registry.add("spring.data.redis.port", redis::getFirstMappedPort);
}

现在可以简化为以下内容

@Container
@ServiceConnection
static GenericContainer redis = new GenericContainer(DockerImageName.parse("redis").withTag("4.0.14"));

此处,@ServiceConnection指示容器应使用 Redis 连接详细信息的来源。spring-boot-testcontainers提供注释的模块将从@ServiceConnection容器中提取这些细节,同时仍然允许使用 Testcontainers API 来定义和配置它。

下图查看注释当前支持的服务的完整列表@ServiceConnection

3.3 Docker Compose

一个新模块,spring-boot-docker-compose提供与 Docker Compose 的集成。当您的应用程序启动时,Docker Compose 集成将在当前工作目录中查找配置文件。支持以下文件:

  • compose.yaml
  • compose.yml
  • docker-compose.yaml
  • docker-compose.yml

要使用非标准文件,请设置该spring.docker.compose.file属性。

默认情况下,配置文件中声明的服务将被启动docker compose up,这些服务的连接详细信息 bean 将被添加到应用程序上下文中,以便可以在没有任何进一步配置的情况下使用这些服务。当应用程序停止时,服务将使用 关闭docker compose downspring.docker.compose.lifecycle-management可以使用、spring.docker.compose.startup.command和配置属性自定义此生命周期管理和用于启动和关闭服务的命令spring.docker.compose.shutdown.command

下图展示更多详细信息,包括当前支持的服务列表

3.4 SSL 配置

RestTemplateJava KeyStore 和 PEM 编码证书等 SSL 信任材料现在可以使用属性进行配置,并WebClient以更一致的方式应用于各种类型的连接,例如嵌入式 Web 服务器、数据服务。

使用 PEM 编码证书配置 SSL示例:

带有前缀的配置属性spring.ssl.bundle.pem可用于以 PEM 编码文本的形式配置信任材料包。每个包都有一个用户提供的名称,可用于引用该包。

当用于保护嵌入式 Web 服务器时,akeystore通常配置有证书和私钥,如本例所示:

spring:
  ssl:
    bundle:
      pem:
        mybundle:
          keystore:
            certificate: "classpath:application.crt"
            private-key: "classpath:application.key"

当用于保护嵌入式 Web 服务器时,truststore通常使用服务器证书配置 a,如本例所示:

spring:
  ssl:
    bundle:
      pem:
        mybundle:
          truststore:
            certificate: "classpath:server.crt"

3.5 Spring授权服务器的自动配置

此版本提供了对Spring Authorization Server项目的支持以及一个新的spring-boot-starter-oauth2-authorization-server启动器。

示例:
如果您spring-security-oauth2-authorization-server的类路径上有,您可以利用一些自动配置来设置基于 Servlet 的 OAuth2 授权服务器。

您可以在spring.security.oauth2.authorizationserver.client前缀下注册多个 OAuth2 客户端,如以下示例所示:

spring:
  security:
    oauth2:
      authorizationserver:
        client:
          my-client-1:
            registration:
              client-id: "abcd"
              client-secret: "{noop}secret1"
              client-authentication-methods:
                - "client_secret_basic"
              authorization-grant-types:
                - "authorization_code"
                - "refresh_token"
              redirect-uris:
                - "https://my-client-1.com/login/oauth2/code/abcd"
                - "https://my-client-1.com/authorized"
              scopes:
                - "openid"
                - "profile"
                - "email"
                - "phone"
                - "address"
            require-authorization-consent: true
          my-client-2:
            registration:
              client-id: "efgh"
              client-secret: "{noop}secret2"
              client-authentication-methods:
                - "client_secret_jwt"
              authorization-grant-types:
                - "client_credentials"
              scopes:
                - "user.read"
                - "user.write"
            jwk-set-uri: "https://my-client-2.com/jwks"
            token-endpoint-authentication-signing-algorithm: "RS256"

Spring Boot 为 Spring Authorization Server 提供的自动配置,就是为了快速上手而设计的。大多数应用程序都需要定制,并希望定义几个 bean 来覆盖自动配置。

以下组件可以定义为 beans 以覆盖特定于 Spring Authorization Server 的自动配置:

  • RegisteredClientRepository
  • AuthorizationServerSettings
  • SecurityFilterChain
  • com.nimbusds.jose.jwk.source.JWKSource<com.nimbusds.jose.proc.SecurityContext>
  • JwtDecoder

3.6 Docker镜像构建

🌟 图像创建日期和时间

Mavenspring-boot:build-image目标和bootBuildImageGradle 任务现在有一个createdDate配置选项,可用于将Created生成的图像元数据中的字段值设置为用户指定的日期或使用now当前日期和时间。有关详细信息,请参阅Gradle和Maven插件文档。

🌟图像应用目录

Mavenspring-boot:build-image目标和bootBuildImageGradle 任务现在有一个applicationDirectory配置选项,可用于设置构建器映像中的位置,应用程序内容将上传到该位置以供构建包使用。这也将是应用程序内容在生成的图像中的位置。有关详细信息,请参阅Gradle和Maven插件文档。

四、用于 GraphQL 的 Spring

4.1 异常处理

@GraphQlExceptionHandler在控制器中声明的方法,或者@ControllerAdvice现在由 Spring for GraphQL 开箱即用地支持控制器方法调用。此外,Spring Boot通过@ControllerAdvice配置.DataFetcherQueryDslDataFetcherQueryByExampleDataFetcher``GraphQlSource

4.2 分页和排序

当 Spring Data 在类路径上时,GraphQL 的 Spring 现在自动配置为支持分页和排序。

4.3 改进的模式类型生成

GraphQlSource现在自动配置了一个ConnectionTypeDefinitionConfigurer. 它通过查找类型定义名称以“Connection”结尾的字段(被 GraphQL 游标连接 规范视为a )来生成“Connection”类型Connection Type,如果它们尚不存在,则添加所需的类型定义。

4.4 支持使用 OTLP 导出跟踪

io.opentelemetry:opentelemetry-exporter-otlp在类路径上时,OtlpHttpSpanExporter将自动配置。可以使用management.otlp.tracing.*配置属性自定义导出器的配置。

4.5 Wavefront Span 标签定制

如果您正在使用 Wavefront 并且想要为 RED 指标自定义 span 标签,现在有一个名为的新属性management.wavefront.trace-derived-custom-tag-keys允许您执行此操作。

4.6 文件和控制台的不同日志级别

如果您使用的是 Logback 或 Log4j2,现在可以选择为控制台日志和文件日志设置不同的日志级别。这可以使用配置属性logging.threshold.console和来设置logging.threshold.file

4.7 最大 HTTP 响应标头大小

如果您使用的是 Tomcat 或 Jetty,您现在可以限制最大 HTTP 响应标头大小。对于 Tomcat,您可以使用该server.tomcat.max-http-response-header-size属性,而对于 Jetty,您可以使用server.jetty.max-http-response-header-size. 默认情况下,响应标头仅限于8kb.

五、spring Boot 3.1 中的弃用

已弃用取而代之
spring.kafka.streams.cache-max-size-bufferingspring.kafka.streams.state-store-cache-max-size
MongoPropertiesClientSettingsBuilderCustomizerStandardMongoClientSettingsBuilderCustomizer
org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapterorg.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesMapper
org.springframework.boot.web.server.SslStoreProviderSSL bundle

六、依赖升级

Spring Boot 3.1.0 迁移到几个 Spring 项目的新版本:

Spring项目Versions
Spring Authorization Server1.1.0
Spring Batch5.0.2
Spring Data2023.0.0
Spring Framework6.0.9
Spring GraphQL1.2.0
Spring HATEOAS2.1.0
Spring Integration6.1.0
Spring Kafka3.0.7
Spring LDAP3.1.0
Spring Security6.1.0
Spring Session3.1.0
Spring Web Services4.0.4

许多第三方依赖项也已更新,其中一些更值得注意的是:

第三方依赖Versions
Couchbase Java Client3.4.6
Elasticsearch Client8.7
Hibernate6.2
GraphQL Java20.1
Jackson2.15.0
Kafka3.4.0
Kotlin1.8.21
Liquibase4.20
Micrometer1.11.0
Micrometer Tracing1.1.1
Mockito5.3
Native Build Tools0.9.22
Neo4j Java Driver5.8.0
OpenTelemetry1.24.0
Rabbit AMQP Client5.17.0
Reactor BOM2022.0.7
Testcontainers1.18
Undertow2.3.6.Final

八、其他

  1. Spring Kafka ContainerCustomizer bean现在被应用于自动配置的KafkaListenerContainerFactory。
  2. 添加了management.otlp.metrics.export.headers属性,以支持向OTLP注册表发送头。
  3. JoranConfigurators bean现在可以在AOT处理中使用。
  4. spring.kafka.admin添加了额外的close-timeout、operation-timeout、auto-startupauto-create属性
  5. BatchInterceptor bean现在被应用于自动配置的ConcurrentKafkaListenerContainerFactory。
  6. Nomad已添加到已识别的CloudPlaform值列表中。
  7. 现在可以为spring.jmx指定registration-policy属性。
  8. 添加了withSanitizedValue实用方法到SanitizableData中。
  9. 引入了RabbitTemplateCustomizer。这种类型的bean将自定义自动配置的RabbitTemplate。
  10. 支持CNB Platform API 0.11
  11. spring-boot-starter-parent将Maven编译器版本设置为配置的Java版本。
  12. 通过设置-Dspring-boot.build-info.skip,现在可以跳过build-info目标。
  13. Micrometer的OtlpMeterRegistry支持聚合时间配置
  14. Log4j2Logback支持更多颜色。
  15. 添加了对R2DBC MySQL驱动程序(io.asyncer:r2dbc-mysql)的依赖管理。
  16. 添加了对R2DBC MariaDB驱动程序(org.mariadb:r2dbc-mariadb)的依赖管理。
  17. 使用OpenTelemetry时,用于创建自动配置的SdkTracerProvider的SdkTracerProviderBuilder可以通过定义SdkTracerProviderBuilderCustomizer bean进行自定义。
  18. MockServerRestTemplateCustomizer现在通过新的setBufferContent方法支持启用内容缓冲
  19. 当自动配置Spring Batch时,可以通过定义BatchConversionServiceCustomizer bean来自定义转换服务。
  20. 用于创建JWK Set URI的JTW解码器的构建器可以通过定义JwkSetUriReactiveJwtDecoderBuilderCustomizerJwkSetUriJwtDecoderBuilderCustomizer bean进行自定义。
  21. 恢复了对io.r2dbc:r2dbc-mssql的依赖管理。
  22. Logback的根日志级别现在尽早默认为INFO
  23. 默认情况下,Docker Compose现在使用stop而不是down停止。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

02SpringCloud Nacos注册中心和配置中心与Sentinel服务熔断和流控

Nacos注册中心和配置中心 Nacos 是 Alibaba 开发的用于微服务管理的平台&#xff0c;核心功能&#xff1a;服务注册与发现和集中配置管理。 Nacos 作为服务注册发现组件&#xff0c;可以替换Spring Cloud 应用中传统的服务注册于发现组件&#xff0c;如&#xff1a;Eureka、C…

XML和JSON格式转换成txt

XML如下这种&#xff1a; 转换代码 import os import xml.etree.ElementTree as ET# xml文件存放目录(修改成自己的文件名) input_dir rC:\121\Annotations# 输出txt文件目录&#xff08;自己创建的文件夹&#xff09; out_dir rC:\121\txtclass_list []# 获取目录所有xml文…

pix2pixHD代码---数据集处理

在train文件中&#xff1a;其中dataset是dataloader的方法&#xff0c;而dataloader等于CreateDataLoader。 所以我们跳到CreateDataLoader&#xff1a; 在CreateDataLoader中返回的是dataset_loader&#xff0c;是来自于CustomDatasetDataLoader。切调用了initialize。因为C…

零次学习(Zero-Shot Learning)

零次学习&#xff08;Zero-Shot Learning&#xff09; 零样本学习zero-shot learning&#xff0c;是最具挑战的机器识别方法之一。2009年&#xff0c;Lampert 等人提出了Animals with Attributes数据集和经典的基于属性学习的算法&#xff0c;开始让这一算法引起广泛关注。 零…

qt quick(qml)通过arcgis导入自定义格式地图(Windows 版本)

参考ArcGIS Maps SDK for Qt 参考Display a map 安装 预先安装的软件 安装ArcGIS SDK 点击ArcGIS Maps SDK for Qt 注册账号 要注册成developer版本用户的&#xff0c;不然之后可能没办法生成API 下载 下载之后安装&#xff0c;一路next就可以了 在QT中创建ArcGIS项目…

CMOS图像传感器——TDI CIS(2)

在之前的文章 CMOS图像传感器——TDI CIS_tdi相机的工作原理_沧海一升的博客-CSDN博客时间延迟积分(Time-Delay Integration, TDI)技术是一种特殊的成像模式https://blog.csdn.net/qq_21842097/article/details/119873386 对CMOS TDI图像传感器做了基本介绍,这里我们…

django项目结合vue执行

开发环境下直接把vue打包后的文件放在django项目&#xff0c;启动前端项目直接打包即可 注意事项&#xff1a; settings.py文件 TEMPLATES [ { ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’, # ‘DIRS’: [], ‘DIRS’: [os.path.join(BASE_DIR,‘front…

Java基础面试题突击系列5

&#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我不迷路 ❤️《java面试核心知识》突击系列&#xff0c;持续更新… &#x1f490; 面试必知必会学习路线&#xff1a;Java技术栈面试系列SpringCloud项目实战学习路线 &#x1f4dd;再小的收获x365天…

mac 切换java jdk版本 java8 java11

1. 终端执行命令 查看本地各版本jdk&#xff1a;mac通常默认安装了jdk1.8 安装目录是 /Library/Java/JavaVirtualMachines/ cd /Library/Java/JavaVirtualMachines/ ls 2. 上述命令列出的各版本目录名 后&#xff0c;在全局配置文件.bash_profile中新增上面命令列出的各…

四月,收割12家offer,面试也太容易了吧....

前言 下面是我根据工作这几年来的面试经验&#xff0c;加上之前收集的资料&#xff0c;整理出来350道软件测试工程师 常考的面试题。字节跳动、阿里、腾讯、百度、快手、美团等大厂常考的面试题&#xff0c;在文章里面都有 提到。 虽然这篇文章很长&#xff0c;但是绝对值得你…

005 - STM32学习笔记 - 启动代码

005 - STM32学习笔记 - 启动代码 常用汇编指令 指令名称作用EQU给数字常量取一个符号名&#xff0c;相当于C语言中的#define&#xff1b;AREA汇编一个新的代码段或者数据段&#xff1b;SPACE分配内存空间&#xff1b;PRESERVE8当前文件栈需要按照8字节对齐&#xff1b;EXPORT…

【ChatGPT】ChatGPT自动生成思维导图

参考视频&#xff1a;https://edu.csdn.net/learn/38346/613917 应用场景&#xff1a;自学&#xff0c;“研一学生如何学习机器学习”的思维导图 问&#xff1a;写一个“研一学生如何学习机器学习”的思维导图内容&#xff0c;以markdown代码块格式输出 # 研一学生如何学习…

探索人工智能和机器学习的前沿趋势

&#x1f31f; 深度学习的突破&#x1f31f; 强化学习的进展&#x1f31f; 可解释性和公平性的挑战&#xff08;1000字&#xff09;&#x1f31f; 自动化和智能化的未来&#xff08;1000字&#xff09; 在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;Artificial In…

全网最牛最前面的浦发银行软件测试面试题精讲分析

面试永远都是软件测试人重点关注的问题&#xff0c;最近也总有很多想去银行面试的小伙伴来问我&#xff0c;有没有什么方法技巧传授一下。 那今天就给大家总结一些浦发银行的面试题&#xff0c;小伙伴们可以看看如果是自己能不能流畅地回答上来这些面试题。 1、说说你们公司测…

c++积累12-const

1、文件作用域-const修饰变量默认为文件局部变量 注意&#xff1a;非const变量默认为extern。要使const变量能够在其他文件中访问&#xff0c;必须在文件中显式地指定它为extern。 1) 未被const修饰的变量在不同文件的访问 可以看到是能够默认不加const是可以正常访问的 2) …

某大型啤酒企业:构建网络安全软实力,首选Coremail反钓鱼演练

客户背景 某大型啤酒厂商的公司规模和市场份额多年来始终都处于行业领先地位&#xff0c;积极赞助多项体育赛事&#xff0c;持续丰富和提升品牌形象。作为一家具有全球影响力的企业&#xff0c;自然也成为了全球黑客等攻击团伙的重点目标&#xff0c;而系统攻击的开端便是钓鱼…

什么是产品路线图?如何做产品路线图规划

产品路线图规划 •产品路线图是一个高层次的战略计划&#xff0c;它描述了产品在未来一段时间可能会如何发展和壮大&#xff0c;产品路线图确保整个产品团队持续关注产品的目标&#xff0c;帮助产品负责人把握产品的战略方向&#xff0c;调整产品的优先级和产品规划。 里程碑…

轻松打造智能化性能测试监控平台:【JMeter+Grafana+Influxdb】的优化整合方案

目录 【引言】 【背景说明】 【实现原理】 【平台搭建】 方法一&#xff1a;Windows或macOS环境下搭建 1.InfluxDB安装 2.grafana安装 3.jmeter配置 方法二&#xff1a;Linux环境下搭建 1.influxdb安装 2.grafana安装 3.jdkjmeter安装 方法三&#xff1a;docker容…

L1-093 猜帽子游戏

宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子&#xff0c;有的是黑色的&#xff0c;有的是黄色的。每个人可以看到别人头上的帽子&#xff0c;但是看不到自己的。游戏开始后&#xff0c;每个人可以猜自己头上的帽子是什么颜色&#xff0c;或者可以弃权不猜。如果没有…