SpringBoot 2.5 版本功能前瞻

前言

目前 Spring Boot 2.5.0 RC1 已經發布,其開發團隊表示將在 5 月 20 日正式 GA。我們梳理了一下大家比較關係和感興趣的一些變更。

一、 運行端點變更

  1. Secure info endpoint(安全的 info 端點)

默認情況下/info端點不再對 web 公開。此外,如果引用了 Spring Security,則默認情況下端點需要經過身份驗證才能訪問。

  1. 優雅關機支持 GET 請求

我們流量請求到此接口執行業務邏輯的時候,若服務端此時執行關機 (kill),Spring boot 默認情況會直接關閉容器(tomcat 等),導致此業務邏輯執行失敗。在一些業務場景下:會出現數據不一致的情況,事務邏輯不會回滾。在 spring boot 2.3 版本,支持優雅停機功能。關於優雅停機可以參考筆者這篇文章Spring Boot 2.3 新特性優雅停機詳解

  1. 記錄停機日誌

通過以下屬性我們可以在 JVM 退出時候,記錄資源釋放日誌等。

logging.register-shutdown-hook
  1. 新增 Quartz 的 Actuator Endpoint

Actuator 中新增了一個 /quartz端點。它提供了有關Quartz作業和觸發器的詳細信息。

  • 訪問 /actuator/quartz
$ curl 'http://localhost:8080/actuator/quartz' -i -X GET
  • 返回應用配置的任務信息
{
  "jobs" : {
    "groups" : [ "samples", "tests" ]
  },
  "triggers" : {
    "groups" : [ "samples", "DEFAULT" ]
  }
}

二、增強容器化功能

1、War 包支持分層

Spring Boot 的MavenGradle插件現在都允許您創建用於 Docker 的分層WARs。分層WARs的工作方式與 springboot 早期版本中提供的分層JAR支持類似。查看 Gradle 和 Maven 參考文檔瞭解更多詳細信息。

具體使用可以參考筆者的這篇文章「Spring Boot 2.3 新特性」分層 JAR

2、Buildpack 支持配置自定義

Spring Boot 2.4[2]基於 Buildpack 推出了自己的 docker 構建工具 整合在原有的spring-boot-maven-plugin中,只需要配置對應目標倉庫和主機信息即可完成鏡像構建。具體使用可以參考筆者的這篇文章「Spring Boot 2.4 新特性」一鍵構建 Docker 鏡像

spring boot 2.5 提供了更多的自定義能力,距離完全拋棄 Dockerfile 的日子更近了。

mvn spring-boot:build-image

三、Environment 前綴

spring boot 可以爲系統環境變量指定前綴,以便可以在同一環境中運行多個不同的 Spring 引導應用程序。使用SpringApplication.setEnvironmentPrefix(…​)設置綁定屬性時要使用的前綴。

例如,下面將添加myapp前綴:

SpringApplication application = new SpringApplication(MyApp.class);
application.setEnvironmentPrefix("myapp");
application.run(args);

現在,所有屬性都需要一個前綴版本。例如,要更改服務器端口

server.port=8080  --> myapp.server.port=8080

四、Metrics 增強

    1. Metrics for Spring Data Repositories
    1. @Timed Metrics with WebFlux
    1. MongoDB Metrics

號外:mica 2.4.5 發佈在即,全網唯一支持 druid 和 undertow 的 Metrics 指標。

五、HTTP/2 over TCP (h2c)

現在,Spring boot 支持四個嵌入式 Web 容器都已經支持基於 TCP(h2c)的 HTTP / 2 協議,無需進行任何手動自定義。如果要開啓 h2c,只需將 server.http2.enabled 設置爲 true,並將 server.ssl.enabled 設置爲 false(默認 false)。

當然,微服務全棧 h2c 還需要打通 feign 和 RestTemplate 這種 http 客戶端,h2c 我們 19 年就開始實踐,詳見:spring-cloud-java11

目前 Spring cloud gateway 的 client 也已經支持了 h2c 詳見:

reactor-netty/issues/639

spring-cloud-gateway/issues/7

六、數據源相關增強

  1. 多數據源監控狀態檢測支持

AbstractRoutingDataSource主要作用於 Spring 多數據源,health端點現在顯示目標數據源的運行狀況。每個目標數據源都使用其路由 key 命名。與前面一樣,要忽略運行狀況端點中的路由數據源

management.health.db.ignore-routing-data-sources=true
  1. 數據源初始化腳本屬性變更

低版本的 spring.datasource.init 現在統一變更爲 spring.sql.init 。

 spring.datasource.init --> spring.sql.init

當然此屬性也可以適用 R2DBC 數據初始化。

  1. 數據初始化重構

爲了支持schema.sql以及data.sql初始化,SpringBoot2.5 中進行了重新設計。

如果在同一個應用程序中同時使用 JPA 和 springboot 的 SQL 腳本初始化,您可能會發現 Springboot2.5 存在一個排序問題。默認情況下,我們先運行schema.sql以及data.sql然後再進行 JPA 初始化。如果希望在 JPA 初始化之後再運行腳本,你可以添加下面的配置。

spring.datasource.initialization-order=after-jpa

最後

本文參與的小夥伴:張亞東(Jap 作者)、如夢技術(mica 作者)、冷冷(pig 作者)

歡迎大家投稿比較有深度、有意思的文章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章