新聞中心
大家好,我是哪吒。

彭陽網(wǎng)站建設公司創(chuàng)新互聯(lián)公司,彭陽網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為彭陽超過千家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務好的彭陽做網(wǎng)站的公司定做!
一、Spring Boot 3.1正式發(fā)布
經(jīng)過半年的沉淀 Spring Boot 3.1于2023年5月18日正式發(fā)布了,帶來了許多令人興奮的新特性和改進。
本篇博客將詳細介紹Spring Boot 3.1的新特性、升級說明以及核心功能的改進。
同時,2.6.x 版本線已經(jīng)停止維護了,最新支持版本如下圖所示:
最新支持版本
下圖時間軸展示了2.7.x 這也是目前唯一正在維護的 2.x 版本線了,商業(yè)支持的版本也只有 2.5.x 了。
商業(yè)支持的版本
二、最低環(huán)境要求
Spring Boot 3.1.0 需要Java 17,并且兼容 Java 20(包括 Java 20)。 還需要Spring Framework 6.0.9或更高版本。
1、為以下構(gòu)建工具提供顯式構(gòu)建支持:
2、Spring Boot 支持以下嵌入式 servlet 容器:
3、GraalVM本地鏡像:
可以使用 GraalVM 22.3 或更高版本將 Spring Boot 應用程序轉(zhuǎn)換為本機映像。
可以使用原生構(gòu)建工具Gradle/Maven 插件或native-imageGraalVM 提供的工具來創(chuàng)建圖像。您還可以使用原生圖像 Paketo buildpack創(chuàng)建原生圖像。
4、支持以下版本:
三、核心特性
1、Apache HttpClient 4 的依賴管理
Spring Framework 6 中刪除了RestTemplate對Apache HttpClient 4 的支持,取而代之的是 Apache HttpClient 5。Spring Boot 3.0 包括 HttpClient 4 和 5 的依賴管理。繼續(xù)使用 HttpClient 4 的應用程序在使用時可能會遇到難以診斷的錯誤。Spring Boot 3.1 移除了 HttpClient 4 的依賴管理,以鼓勵用戶轉(zhuǎn)而使用 HttpClient 5。
HttpClient 5 是Apache HttpComponents中的一個 HTTP 客戶端庫,可以用來發(fā)送 HTTP 請求和接收 HTTP 響應。下面是 HttpClient 5 的簡單使用示例:
(1)添加 HttpClient 5 的依賴
在 Maven 項目中,可以通過在 pom.xml 文件中添加以下依賴將 HttpClient 5 添加到項目中:
org.apache.httpcomponents
httpclient5
5.1
(2)創(chuàng)建 HttpClient 實例:
HttpClient httpClient = HttpClientBuilder.create().build();
(3)創(chuàng)建 HttpGet 請求:
HttpGet httpGet = new HttpGet("https://www.example.com/");
(4)發(fā)送請求并獲取響應:
HttpResponse response = httpClient.execute(httpGet);
(5)處理響應:
int statusCode = response.getStatusLine().getStatusCode();
String responseBody = EntityUtils.toString(response.getEntity());其中,response.getStatusLine().getStatusCode() 可以獲取響應狀態(tài)碼,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現(xiàn)在將失敗,IllegalStateException而不是記錄警告。如果您需要舊的行為,您應該調(diào)用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 中的一個顯著變化是引入了處理限制。要調(diào)整這些約束,請定義Jackson2ObjectMapperBuilderCustomizer類似于以下內(nèi)容:
@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 發(fā)行說明以了解 Mockito 5.x 系列中的顯著變化。
7、Health Group Membership Validation
現(xiàn)在在啟動時驗證配置的健康組成員身份。如果包含或排除了不存在的健康指標,啟動將失敗??梢越么蓑炞C,恢復早期版本的行為,方法是設置management.endpoint.health.validate-group-membership為false。
四、增強功能
1、服務連接
引入了新的服務連接概念。此類連接在應用程序中由 bean 表示ConnectionDetails。這些 bean 提供了必要的細節(jié)來建立與刪除服務的連接,并且 Spring Boot 的自動配置已更新為使用ConnectionDetailsbean。當此類 beans 可用時,它們將優(yōu)先于任何與連接相關的配置屬性。與連接本身無關的配置屬性,例如控制連接池大小和行為的屬性,仍將被使用。
此低級功能旨在作為其他高級功能的構(gòu)建塊,這些功能通過定義ConnectionDetailsbean 自動配置服務連接。
在沒有在其他地方定義適當?shù)?bean 的情況下…ConnectionDetails,Spring Boot 的自動配置已更新為定義自己的基礎,由相關配置屬性支持。這允許…ConnectionDetails注入而不必處理沒有這樣的 bean 可用并且需要回退到基于屬性的配置的情況。
2、在開發(fā)時使用測試容器
引入了對在開發(fā)時使用測試容器管理外部服務的支持。
在開發(fā)時使用 Testcontainer 時,可以使用新的 Maven goal( spring-boot:test-run) 和 Gradle task( bootTestRun) 通過測試 main 方法啟動應用程序。
Container可以使用新注釋導入將 Testcontainers 實例聲明為靜態(tài)字段的類@ImportTestcontainers。
測試容器生命周期的管理得到改進,確保容器先初始化,最后銷毀。對可重復使用容器的支持也得到了改進。
從方法貢獻屬性Container @Bean,DynamicPropertyRegistry現(xiàn)在可以注入。@DynamicPropertySource這與您在測試中使用的方式類似。
有關詳細信息,請參閱下圖:
測試容器服務連接
使用 Testcontainers 時,@DynamicPropertySource通常用于根據(jù)容器的設置配置應用程序?qū)傩裕?/p>
@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);
}現(xiàn)在可以簡化為以下內(nèi)容:
@Container
@ServiceConnection
static GenericContainer redis = new GenericContainer(DockerImageName.parse("redis").withTag("4.0.14"));此處,@ServiceConnection指示容器應使用 Redis 連接詳細信息的來源。spring-boot-testcontainers提供注釋的模塊將從@ServiceConnection容器中提取這些細節(jié),同時仍然允許使用 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 信任材料現(xiàn)在可以使用屬性進行配置,并WebClient以更一致的方式應用于各種類型的連接,例如嵌入式 Web 服務器、數(shù)據(jù)服務。
使用 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授權(quán)服務器的自動配置
此版本提供了對Spring Authorization Server項目的支持以及一個新的spring-boot-starter-oauth2-authorization-server啟動器。
示例:
如果您spring-security-oauth2-authorization-server的類路徑上有,您可以利用一些自動配置來設置基于 Servlet 的 OAuth2 授權(quán)服務器。
您可以在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 提供的自動配置,就是為了快速上手而設計的。大多數(shù)應用程序都需要定制,并希望定義幾個 bean 來覆蓋自動配置。
以下組件可以定義為 beans 以覆蓋特定于 Spring Authorization Server 的自動配置:
- RegisteredClientRepository
- AuthorizationServerSettings
- SecurityFilterChain
- com.nimbusds.jose.jwk.source.JWKSource
- JwtDecoder
6、Docker鏡像構(gòu)建
(1)圖像創(chuàng)建日期和時間
Mavenspring-boot:build-image目標和bootBuildImageGradle 任務現(xiàn)在有一個createdDate配置選項,可用于將Created生成的圖像元數(shù)據(jù)中的字段值設置為用戶指定的日期或使用now當前日期和時間。
(2)圖像應用目錄
Mavenspring-boot:build-image目標和bootBuildImageGradle 任務現(xiàn)在有一個applicationDirectory配置選項,可用于設置構(gòu)建器映像中的位置,應用程序內(nèi)容將上傳到該位置以供構(gòu)建包使用。這也將是應用程序內(nèi)容在生成的圖像中的位置。
五、用于 GraphQL 的 Spring
1、異常處理
@GraphQlExceptionHandler在控制器中聲明的方法,或者@ControllerAdvice現(xiàn)在由 Spring for GraphQL 開箱即用地支持控制器方法調(diào)用。此外,Spring Boot通過@ControllerAdvice配置DataFetcher、QueryDslDataFetcher、QueryByExampleDataFetcher、GraphQlSource。
2、分頁和排序
當 Spring Data 在類路徑上時,GraphQL 的 Spring 現(xiàn)在自動配置為支持分頁和排序。
3、改進的模式類型生成
GraphQlSource現(xiàn)在自動配置了一個ConnectionTypeDefinitionConfigurer. 它通過查找類型定義名稱以“Connection”結(jié)尾的字段來生成“Connection”類型Connection Type,如果它們尚不存在,則添加所需的類型定義。
4、支持使用 OTLP 導出跟蹤
當io.opentelemetry:opentelemetry-exporter-otlp在類路徑上時,OtlpHttpSpanExporter將自動配置??梢允褂胢anagement.otlp.tracing.*配置屬性自定義導出器的配置。
5、Wavefront Span 標簽定制
如果您正在使用 Wavefront 并且想要為 RED 指標自定義 span 標簽,現(xiàn)在有一個名為的新屬性management.wavefront.trace-derived-custom-tag-keys允許您執(zhí)行此操作。
6、文件和控制臺的不同日志級別
如果您使用的是 Logback 或 Log4j2,現(xiàn)在可以選擇為控制臺日志和文件日志設置不同的日志級別。這可以使用配置屬性logging.threshold.console和來設置logging.threshold.file。
7、最大 HTTP 響應標頭大小
如果您使用的是 Tomcat 或 Jetty,您現(xiàn)在可以限制最大 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 |
八、其他
- Spring Kafka ContainerCustomizer bean現(xiàn)在被應用于自動配置的KafkaListenerContainerFactory。
- 添加了management.otlp.metrics.export.headers屬性,以支持向OTLP注冊表發(fā)送頭。
- JoranConfigurators bean現(xiàn)在可以在AOT處理中使用。
- spring.kafka.admin添加了額外的close-timeout、operation-timeout、auto-startup和auto-create屬性。
- BatchInterceptor bean現(xiàn)在被應用于自動配置的ConcurrentKafkaListenerContainerFactory。
- Nomad已添加到已識別的CloudPlaform值列表中。
- 現(xiàn)在可以為spring.jmx指定registration-policy屬性。
- 添加了withSanitizedValue實用方法到SanitizableData中。
- 引入了RabbitTemplateCustomizer。這種類型的bean將自定義自動配置的RabbitTemplate。
- 支持CNB Platform API 0.11。
- spring-boot-starter-parent將Maven編譯器版本設置為配置的Java版本。
- 通過設置-Dspring-boot.build-info.skip,現(xiàn)在可以跳過build-info目標。
- Micrometer的OtlpMeterRegistry支持聚合時間配置。
- Log4j2和Logback支持更多顏色。
- 添加了對R2DBC MySQL驅(qū)動程序(io.asyncer:r2dbc-mysql)的依賴管理。
- 添加了對R2DBC MariaDB驅(qū)動程序(org.mariadb:r2dbc-mariadb)的依賴管理。
- 使用OpenTelemetry時,用于創(chuàng)建自動配置的SdkTracerProvider的SdkTracerProviderBuilder可以通過定義SdkTracerProviderBuilderCustomizer bean進行自定義。
- MockServerRestTemplateCustomizer現(xiàn)在通過新的setBufferContent方法支持啟用內(nèi)容緩沖
- 當自動配置Spring Batch時,可以通過定義BatchConversionServiceCustomizer bean來自定義轉(zhuǎn)換服務。
- 用于創(chuàng)建JWK Set URI的JTW解碼器的構(gòu)建器可以通過定義JwkSetUriReactiveJwtDecoderBuilderCustomizer或JwkSetUriJwtDecoderBuilderCustomizer bean進行自定義。
- 恢復了對io.r2dbc:r2dbc-mssql的依賴管理。
- Logback的根日志級別現(xiàn)在盡早默認為INFO。
- 默認情況下,Docker Compose現(xiàn)在使用stop而不是down停止。
本文轉(zhuǎn)載自微信公眾號「哪吒編程」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系哪吒編程公眾號。
網(wǎng)頁題目:新項目為什么決定用SpringBoot3.1+JDK17了
路徑分享:http://fisionsoft.com.cn/article/cdehchs.html


咨詢
建站咨詢
