探索SpringBoot 3.1的惊艳新特性

news2024/11/15 11:54:57

一、介绍

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/564504.html

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

相关文章

《消息队列高手课》课程笔记(二)

消息模型&#xff1a;主题和队列有什么区别&#xff1f; 两类消息模型 早期的消息队列&#xff0c;就是按照“队列”的数据结构来设计的。 生产者&#xff08;Producer&#xff09;发消息就是入队操作&#xff0c;消费者&#xff08;Consumer&#xff09;收消息就是出队也就是…

数字逻辑习题

第一次作业 第二次作业 第三次作业 卡诺图最小项 计算模数M考察74LS161的特点 计数器数据选择器 在A和C加上非门即可 求计数器的模数M 该计数器是环形计数器&#xff08;循环右移&#xff09;&#xff0c;模数根据初始状态而定 由n个移位寄存器构成的环形计数器最大可能模值为n…

韩流在元宇宙中崛起,感受韩国文化的魅力!

大获成功&#xff01;第一波 K-verse 土地全部售罄&#xff01; 多家领先韩国文化公司&#xff0c;包括 SMBM、CUBE 娱乐、LINE Studio、Gravity、乐天世界、K League 等进驻 The Sandbox&#xff0c;并在第一波 K-verse 土地销售活动上发布了邻近这些公司的 LAND。 所有土地全…

哈希表(散列表)详解

&#x1f495;**今天的每一秒都是珍贵的&#xff0c;因为它永远不会再次出现。**&#x1f495; &#x1f43c;作者&#xff1a;不能再留遗憾了&#x1f43c; &#x1f386;专栏&#xff1a;Java学习&#x1f386; &#x1f697;本文章主要内容&#xff1a;深入理解哈希表&#…

npm init和npm create、npm create vite什么意思

npm init 和npm create 之前在用npm时&#xff0c;一直都是npm init来初始化一个项目并生成package.json文件。 但是&#xff0c;今天在看vite的官方文档时&#xff0c;vite上说创建一个vite项目的命令是 npm create vitelatest之前一直没有用过npm create这个命令&#xff…

sql ---- 查询两个日期间隔的天数:Datediff(a,b)

197. 上升的温度 表&#xff1a; Weather ------------------------ | Column Name | Type | ------------------------ | id | int | | recordDate | date | | temperature | int | ------------------------ id 是这个表的主键 该表包含特定…

Windows编程开发中的语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下Windows编程开发中的语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖。 首先你要明白一点&#xff1a; 逻辑覆盖率&#xff1a;语句覆盖<条件覆盖<判定覆盖<条件-判…

Prometheus+Grafana学习(十一)安装使用pushgateway

Pushgateway允许短暂和批量作业将其指标暴露给 Prometheus。由于这些工作的生命周期可能不足够长&#xff0c;不能够存在足够的时间以让 Prometheus 抓取它们的指标。Pushgateway 允许它们可以将其指标推送到 Pushgateway&#xff0c;然后 Pushgateway 再将这些指标暴露给 Prom…

算法套路十八——区间 DP

算法套路十八——区间 DP 线性DP: 具有前缀/后缀结构的问题&#xff0c;其中每个阶段只依赖于前一阶段的状态区间DP:需要确定给定区间内所有可能状态的问题&#xff0c;并从较小区间向较大区间进行转移。 区间DP介绍&#xff1a;https://oi-wiki.org/dp/interval/ 算法示例&…

网络安全证书合集

网络安全作为2022年十大高新紧缺技能之一&#xff0c;足以证明网络安全的重要性&#xff0c;作为网络安全工程师更是责任重大&#xff0c;证书作为能力证明的一方面&#xff0c;也是尤为重要&#xff0c;本文将着重盘点一下网络安全证书合集。 国家注册渗透测试工程师&#xf…

传染病学模型 | Matlab实现SEIR传染病学模型 (SEIR Epidemic Model)

文章目录 效果一览基本描述模型介绍程序设计参考资料效果一览 基本描述 传染病学模型 | Matlab实现SEIR传染病学模型 (SEIR Epidemic Model) 模型介绍 SEIR模型是一种常见的传染病传播模型,用于描述人群感染某种传染病的过程。SEIR模型将人群划分为四个互相转化的状态: 易感者…

内容好但流量差?B站流量密码可能就在这

B站知名数码UP主老师好我叫何同学&#xff08;以下简称“何同学”。&#xff09;时隔两个月再次更新&#xff0c;这支标题为《为了找到流量密码&#xff0c;我们做了个假B站...》的视频不仅吸引了观众的围观&#xff0c;更是获得了众多B站UP主们的“声援”。 如题所见&#xf…

Netty 源码分析系列(十八)一行简单的writeAndFlush都做了哪些事?

文章目录 前言源码分析ctx.writeAndFlush 的逻辑writeAndFlush 源码ChannelOutBoundBuff 类addMessage 方法addFlush 方法AbstractNioByteChannel 类 小结 前言 对于使用netty的小伙伴来说&#xff0c;我们想通过服务端往客户端发送数据&#xff0c;通常我们会调用ctx.writeAn…

SURF算法详解

Speeded Up Robust Features&#xff08;SURF&#xff0c;加速稳健特征&#xff09; 一&#xff0e;积分图像 1.什么是积分图像 积分图像是输入的灰度图像经过一种像素间的累加运算得到种新的图像媒介。对于一幅灰度的图像&#xff0c;积分图像中的任意一点&#xff08;x,y&…

【投毒情报】PyPI中 colorara 等组件包泄漏主机截屏等敏感信息

漏洞描述 PyPI仓库中受影响版本的 colorara 和 libida组件在安装过程中会根据不同操作系统分别执行恶意逻辑&#xff0c;针对Windows执行White Snake远控木马&#xff0c;针对Linux收集系统截屏、主机名、用户名、IP等主机敏感信息发送至telegram。 漏洞名称PyPI中 colorara …

大数据可视化大屏电子沙盘合集

大数据可视化电子沙盘 使用HTML、CSS、JavaScript&#xff0c;实现的可视化大数据电子沙盘 如果觉得对你有用&#xff0c;随手点个 &#x1f31f; Star &#x1f31f; 支持下&#xff0c;这样才有持续下去的动力&#xff0c;谢谢&#xff01;&#xff5e; 体验地址&#xff0…

一文告诉你黑盒测试、白盒测试、集成测试和系统测试的区别与联系

于开发人员来说&#xff0c;往往对各种测试方法感到疑惑。特别是在整合代码的时候&#xff0c;我们就能深刻感觉受到测试的重要性。很多开发人员只注重写代码&#xff0c;轻视测试的重要性。总是代码一写完提交然后就交给测试组测试了&#xff0c;没多久测试组发回测试报告。然…

java 在线音乐网站系统Myeclipse开发mysql数据库struts2结构java编程计算机网页项目

一、源码特点 java 在线音乐网站系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助struts2开发技术&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mys…

二叉树初阶和堆的详解

前言&#xff1a;二叉树是一种基础数据结构&#xff0c;它由节点和边构成&#xff0c;其中每个节点最多只有两个子节点&#xff0c;称为左子节点和右子节点。二叉树具有许多应用&#xff0c;例如搜索算法和排序算法&#xff0c;还可以用于创建堆等高级数据结构。 堆是一种基于完…

一次完整的性能测试,测试人员需要做哪些工作?

今天和大家讲一下完成性能测试&#xff0c;测试人员需要做哪些工作&#xff1f;接下来一菲用四个步骤妥妥的教会你&#xff0c;啥叫完整的性能测试&#xff0c;请看好了呀&#xff01; 一.流程概述 1.规范流程的意义 规范的性能测试实施流程能够加强测试工作流程控制&#x…