成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

新項目為什么決定用 Spring Boot 3.1 + JDK 17了

開發 架構
本篇博客將詳細介紹Spring Boot 3.1的新特性、升級說明以及核心功能的改進。

大家好,我是哪吒。

一、Spring Boot 3.1正式發布

經過半年的沉淀 Spring Boot 3.1于2023年5月18日正式發布了,帶來了許多令人興奮的新特性和改進。

本篇博客將詳細介紹Spring Boot 3.1的新特性、升級說明以及核心功能的改進。

圖片

同時,2.6.x 版本線已經停止維護了,最新支持版本如下圖所示:

圖片

最新支持版本

下圖時間軸展示了2.7.x 這也是目前唯一正在維護的 2.x 版本線了,商業支持的版本也只有 2.5.x 了。

圖片

商業支持的版本

二、最低環境要求

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

1、為以下構建工具提供顯式構建支持:

圖片

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

圖片

3、GraalVM本地鏡像:

可以使用 GraalVM 22.3 或更高版本將 Spring Boot 應用程序轉換為本機映像。

可以使用原生構建工具Gradle/Maven 插件或native-imageGraalVM 提供的工具來創建圖像。您還可以使用原生圖像 Paketo buildpack創建原生圖像。

4、支持以下版本:

圖片

三、核心特性

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 5 是Apache HttpComponents中的一個 HTTP 客戶端庫,可以用來發送 HTTP 請求和接收 HTTP 響應。下面是 HttpClient 5 的簡單使用示例:

(1)添加 HttpClient 5 的依賴

在 Maven 項目中,可以通過在 pom.xml 文件中添加以下依賴將 HttpClient 5 添加到項目中:

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

(2)創建 HttpClient 實例:

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

(3)創建 HttpGet 請求:

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

(4)發送請求并獲取響應:

HttpResponse response = httpClient.execute(httpGet);

(5)處理響應:

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

其中,response.getStatusLine().getStatusCode() 可以獲取響應狀態碼,EntityUtils.toString(response.getEntity()) 可以獲取響應正文。

(6)完整的代碼如下:

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、Servlet 和過濾器注冊

ServletRegistrationBean如果注冊失敗,和類FilterRegistrationBean現在將失敗,IllegalStateException而不是記錄警告。如果您需要舊的行為,您應該調用setIgnoreRegistrationFailure(true)您的注冊 bean。

3、Git 提交 ID Maven 插件版本屬性

用于覆蓋 的版本的屬性io.github.git-commit-id:git-commit-id-maven-plugin已更新以與其工件名稱保持一致。為了適應這種變化,請git-commit-id-plugin.version在git-commit-id-maven-plugin.version您的pom.xml。

4、Hibernate 6.2

Spring Boot 3.1 升級到 Hibernate 6.2。請參閱Hibernate 6.2 遷移指南以了解這對您的應用程序有何影響。

圖片

Hibernate 6.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())); 
}

6、Mockito 5

Spring Boot 3.1 升級到 Mockito 5,特別是 5.3。請參閱 Mockito 發行說明以了解 Mockito 5.x 系列中的顯著變化。

7、Health Group Membership Validation

現在在啟動時驗證配置的健康組成員身份。如果包含或排除了不存在的健康指標,啟動將失敗。可以禁用此驗證,恢復早期版本的行為,方法是設置management.endpoint.health.validate-group-membership為false。

四、增強功能

1、服務連接

引入了新的服務連接概念。此類連接在應用程序中由 bean 表示ConnectionDetails。這些 bean 提供了必要的細節來建立與刪除服務的連接,并且 Spring Boot 的自動配置已更新為使用ConnectionDetailsbean。當此類 beans 可用時,它們將優先于任何與連接相關的配置屬性。與連接本身無關的配置屬性,例如控制連接池大小和行為的屬性,仍將被使用。

此低級功能旨在作為其他高級功能的構建塊,這些功能通過定義ConnectionDetailsbean 自動配置服務連接。

在沒有在其他地方定義適當的 bean 的情況下…ConnectionDetails,Spring Boot 的自動配置已更新為定義自己的基礎,由相關配置屬性支持。這允許…ConnectionDetails注入而不必處理沒有這樣的 bean 可用并且需要回退到基于屬性的配置的情況。

2、在開發時使用測試容器

引入了對在開發時使用測試容器管理外部服務的支持。

在開發時使用 Testcontainer 時,可以使用新的 Maven goal( spring-boot:test-run) 和 Gradle task( bootTestRun) 通過測試 main 方法啟動應用程序。

Container可以使用新注釋導入將 Testcontainers 實例聲明為靜態字段的類@ImportTestcontainers。

測試容器生命周期的管理得到改進,確保容器先初始化,最后銷毀。對可重復使用容器的支持也得到了改進。

從方法貢獻屬性Container @Bean,DynamicPropertyRegistry現在可以注入。@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、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 down。spring.docker.compose.lifecycle-management可以使用、spring.docker.compose.startup.command和配置屬性自定義此生命周期管理和用于啟動和關閉服務的命令spring.docker.compose.shutdown.command。

下圖展示更多詳細信息,包括當前支持的服務列表:

圖片

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"

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

6、Docker鏡像構建

(1)圖像創建日期和時間

Mavenspring-boot:build-image目標和bootBuildImageGradle 任務現在有一個createdDate配置選項,可用于將Created生成的圖像元數據中的字段值設置為用戶指定的日期或使用now當前日期和時間。

(2)圖像應用目錄

Mavenspring-boot:build-image目標和bootBuildImageGradle 任務現在有一個applicationDirectory配置選項,可用于設置構建器映像中的位置,應用程序內容將上傳到該位置以供構建包使用。這也將是應用程序內容在生成的圖像中的位置。

五、用于 GraphQL 的 Spring

1、異常處理

@GraphQlExceptionHandler在控制器中聲明的方法,或者@ControllerAdvice現在由 Spring for GraphQL 開箱即用地支持控制器方法調用。此外,Spring Boot通過@ControllerAdvice配置DataFetcher、QueryDslDataFetcher、QueryByExampleDataFetcher、GraphQlSource。

2、分頁和排序

當 Spring Data 在類路徑上時,GraphQL 的 Spring 現在自動配置為支持分頁和排序。

3、改進的模式類型生成

GraphQlSource現在自動配置了一個ConnectionTypeDefinitionConfigurer. 它通過查找類型定義名稱以“Connection”結尾的字段來生成“Connection”類型Connection Type,如果它們尚不存在,則添加所需的類型定義。

4、支持使用 OTLP 導出跟蹤

當io.opentelemetry:opentelemetry-exporter-otlp在類路徑上時,OtlpHttpSpanExporter將自動配置。可以使用management.otlp.tracing.*配置屬性自定義導出器的配置。

5、Wavefront Span 標簽定制

如果您正在使用 Wavefront 并且想要為 RED 指標自定義 span 標簽,現在有一個名為的新屬性management.wavefront.trace-derived-custom-tag-keys允許您執行此操作。

6、文件和控制臺的不同日志級別

如果您使用的是 Logback 或 Log4j2,現在可以選擇為控制臺日志和文件日志設置不同的日志級別。這可以使用配置屬性logging.threshold.console和來設置logging.threshold.file。

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-buffering

spring.kafka.streams.state-store-cache-max-size

MongoPropertiesClientSettingsBuilderCustomizer

StandardMongoClientSettingsBuilderCustomizer

org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapter

org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesMapper

org.springframework.boot.web.server.SslStoreProvider

SSL bundle

七、依賴升級

Spring Boot 3.1.0 遷移到幾個 Spring 項目的新版本:

Spring項目

Versions

Spring Authorization Server

1.1.0

Spring Batch

5.0.2

Spring Data

2023.0.0

Spring Framework

6.0.9

Spring GraphQL

1.2.0

Spring HATEOAS

2.1.0

Spring Integration

6.1.0

Spring Kafka

3.0.7

Spring LDAP

3.1.0

Spring Security

6.1.0

Spring Session

3.1.0

Spring Web Services

4.0.4

許多第三方依賴項也已更新,其中一些更值得注意的是:

第三方依賴

Versions

Couchbase Java Client

3.4.6

Elasticsearch Client

8.7

Hibernate

6.2

GraphQL Java

20.1

Jackson

2.15.0

Kafka

3.4.0

Kotlin

1.8.21

Liquibase

4.20

Micrometer

1.11.0

Micrometer Tracing

1.1.1

Mockito

5.3

Native Build Tools

0.9.22

Neo4j Java Driver

5.8.0

OpenTelemetry

1.24.0

Rabbit AMQP Client

5.17.0

Reactor BOM

2022.0.7

Testcontainers

1.18

Undertow

2.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-startup和auto-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. Log4j2和Logback支持更多顏色。
  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解碼器的構建器可以通過定義JwkSetUriReactiveJwtDecoderBuilderCustomizer或JwkSetUriJwtDecoderBuilderCustomizer bean進行自定義。
  21. 恢復了對io.r2dbc:r2dbc-mssql的依賴管理。
  22. Logback的根日志級別現在盡早默認為INFO。
  23. 默認情況下,Docker Compose現在使用stop而不是down停止。

本文轉載自微信公眾號「哪吒編程」,可以通過以下二維碼關注。轉載本文請聯系哪吒編程公眾號。

責任編輯:姜華 來源: 哪吒編程
相關推薦

2023-05-17 08:20:34

Java 17編程語言

2024-10-17 14:14:29

2022-11-09 07:49:12

Records類聲明代碼

2024-05-29 09:50:24

2023-07-31 07:45:12

Spring項目Jakarta

2024-08-26 09:36:06

2025-04-29 00:04:00

2024-07-04 08:56:35

Vue3項目Pinia

2012-04-06 10:35:30

SpringJavaHibernate

2020-06-30 14:25:28

MavenGradle Spring

2020-05-07 16:30:32

Spring BootJava

2021-01-08 10:05:01

JavaSpring Boojar

2025-04-01 08:08:29

2019-09-29 10:42:02

人工智能機器學習技術

2018-02-10 08:59:19

物聯網IoT硬件

2021-04-07 08:00:00

Java開發工具

2022-05-07 07:47:23

SpringJava開發

2020-08-14 10:40:35

RestTemplatRetrofitJava

2023-07-07 09:08:21

2019-09-09 14:18:35

人工智能數據開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美视频精品 | 美女一区| 亚洲a在线观看 | 成年人在线观看 | 福利片在线看 | 亚洲 欧美 日韩 在线 | 日日夜夜天天 | 日韩成人免费在线视频 | 国产婷婷色一区二区三区 | 成人国产在线视频 | 日本高清中文字幕 | 伊人影院99 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 国产精品久久久久久久久久免费看 | 亚洲国产成人精品女人久久久 | 日韩精品视频在线播放 | 亚洲视频在线观看免费 | 久久av一区 | 伊人精品久久久久77777 | 国产小视频在线 | 欧美日韩久久精品 | 99re在线视频观看 | 欧美精品99 | 久久久久久电影 | 91免费在线看 | 成人免费视频网站在线观看 | 伊人免费视频二 | 在线观看a视频 | 国产激情一区二区三区 | 性色综合 | 中文字幕日本一区二区 | 99国产精品视频免费观看一公开 | 成人在线视频一区 | 日本韩国欧美在线观看 | 免费在线观看av | 色精品视频 | 黄网站涩免费蜜桃网站 | 国产天堂 | 欧美日韩一卡 | 久久久久久久久中文字幕 | 亚洲欧美视频 |