Spring Boot 2.6.0正式釋出:預設禁止迴圈依賴、增強Docker映象構建...

程式猿DD發表於2021-11-20

昨天,Spring官方正式釋出了Spring Boot今年最後一個特性版本:2.6.0

同時,也宣佈了2.4.x版本的終結。

那麼這個新版本又帶來了哪些新特性呢?下面就一起跟著DD來看看吧!

重要特性

該屬性可通過server.session.cookie.same-site屬性來配置,共有三個可選值:

  • Strict 嚴格模式,必須同站請求才能傳送 cookie
  • Lax 寬鬆模式,安全的跨站請求可以傳送 cookie
  • None 禁止 SameSite 限制,必須配合 Secure 一起使用

2. 支援為主應用埠和管理埠配置健康組

這在 Kubernetes 等雲服務環境中很有用。在這種環境下,出於安全目的,為執行器端點使用單獨的管理埠是很常見的。擁有單獨的埠可能會導致不可靠的健康檢查,因為即使健康檢查成功,主應用程式也可能無法正常工作。

以往傳統的配置會將所有Actuator端點都放在一個單獨的埠上,並將用於檢測應用狀態的健康組放在主埠的附加路徑下。

3. 增強/info端點,加入Java Runtime資訊

增強後的例子:

{
  "java": {
    "vendor": "BellSoft",
    "version": "17",
    "runtime": {
      "name": "OpenJDK Runtime Environment",
      "version": "17+35-LTS"
    },
    "jvm": {
      "name": "OpenJDK 64-Bit Server VM",
      "vendor": "BellSoft",
      "version": "17+35-LTS"
    }
  }
}

該資訊可以通過這個屬性開啟或關閉:

management.info.java.enabled=true

4. 支援使用WebTestClient來測試Spring MVC

開發人員可以使用 WebTestClient 在模擬環境中測試 WebFlux 應用程式,或針對實時伺服器測試任何 Spring Web 應用程式。

這次增強後,開發者可以在Mock環境中使用 @AutoConfigureMockMvc 註釋的類,就可以輕鬆注入 WebTestClient。 這樣編寫測試就比之前容易多了。

5. 增加spring-rabbit-stream的自動化配置

這次更新新增了 Spring AMQP 的新 spring-rabbit-stream 模組的自動配置。

當spring.rabbitmq.listener.type屬性設定為stream時, StreamListenerContainer 是自動配置的。

spring.rabbitmq.stream.*屬性可用於配置對broker的訪問,spring.rabbitmq.listener.stream.native-listener 可用於啟用native listener

6. 支援/env端點和configprops配置屬性的自定義脫敏

雖然 Spring Boot 之前已經可以處理 /env 和 /configprops 端點中存在的敏感值,只需要可以通過配置屬性來控制即可。但還有一種情況,使用者可能希望根據屬性源自哪個 PropertySource 來應用清理。

例如,Spring Cloud Vault 使用 Vault 來儲存加密值並將它們載入到 Spring 環境中。由於所有值都是加密的,因此將整個屬性源中的每個鍵的值脫敏是有意義的。可以通過新增型別為 SanitizingFunction 的 @Bean 來配置此類自定義脫敏規則。

順手推薦一下我一直在連載的免費教程:Spring Boot教程可以點選直達!。跟很多其他教程不同。這個教程不光兼顧了1.x和2.x版本。同時,對於每次的更新,都會選擇一些相關內容修補Tips,所以對各種不同階段的讀者長期都會有一些收穫。如果你覺得不錯,記得轉發支援一下!

其他變更

1. Reactive Session 個性化

當前版本可以動態配置 reactive session 的有效期

server.reactive.session.timeout=30

2. Redis 連結自動配置連結池

當應用依賴中包含 commons-pool2.jar 會自動配置 redis 連結池 (Jedis Lettuce 都支援)。如果你想關閉則通過如下屬性:

spring.redis.jedis.pool.enabled=false

spring.redis.lettuce.pool.enabled=false

3. 構建資訊個性化

  • 通過 spring-boot-maven-plugin 支援自動生成此次構建資訊的 build-info.properties
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
           <excludeInfoProperties>
            <excludeInfoProperty>version</excludeInfoProperty>
         </excludeInfoProperties>
      </configuration>
    </plugin>

4. Metrics新增指標

應用啟動的兩個新指標:

application.started.time: 啟動應用程式所需的時間

application.ready.time:  啟動應用到對外提供服務所需時間

磁碟空間的兩個指標:

disk.free: 磁碟空閒空間

disk.total: 磁碟總空間

5. Docker映象的構建

增強docker-maven-plugin外掛的功能:

  • 為自定義映象設定tags標籤
  • 網路配置引數,可用於Cloud Native Buildpacks的構建過程
  • 支援使用 buildCache 和 launchCache 配置引數自定義用於快取層的名稱,這些層由構建包提供給構建的映象

6. 移除 2.4 版本中的過期屬性

由於2.4版本完成歷史使命,因此有大量過期屬性被移除,最近要升級的小夥伴一定要關注一下這部分內容,因為你原來的配置會失效!

關於Spring MVC 和 servlet 部分屬性:

舊屬性(已刪除) 新屬性
spring.web.locale spring.mvc.locale
spring.web.locale-resolver spring.mvc.locale-resolver
spring.web.resources.* spring.resources.*
management.server.base-path management.server.servlet.context-path

關於Elasticsearch屬性的變更:

因為內容較多,這裡就不完全貼出來了,有興趣的可以看看文末參考資料中的官方資訊。

7. 預設情況完全禁止Bean的迴圈引用

還記得前幾天我釋出的這篇:為什麼IDEA不推薦你使用@Autowired ?

對於鼓勵大家用構造器的方式,還受到了一些網友的嘲諷。

那麼在2.6.0之後,如果小夥伴依然覺得迴圈依賴無所謂,還堅持要用下面的這種模式:

那麼,你將收穫下面這樣的報錯:

┌─────┐
|  a (field private com.example.demo.B com.example.demo.A.b)
↑     ↓
|  b (field private com.example.demo.A com.example.demo.B.a)
└─────┘


Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

其實,Spring官方這樣做,也是為了鼓勵大家養成不要有迴圈依賴的好習慣。

但對於屎山專案,可能這樣的要求對於開發者會很痛苦。所以,你也可以通過下面的配置,放開不允許迴圈依賴的要求:

spring.main.allow-circular-references=true

8. SpringMVC 預設路徑匹配策略

Spring MVC 處理程式對映匹配請求路徑的預設策略已從 AntPathMatcher 更改為PathPatternParser

Actuator端點現在也使用基於 PathPattern 的 URL 匹配。需要注意的是,Actuator端點的路徑匹配策略無法通過配置屬性進行配置。

如果需要將預設切換回 AntPathMatcher,可以將 spring.mvc.pathmatch.matching-strategy 設定為 ant-path-matcher,比如下面這樣:

spring.mvc.pathmatch.matching-strategy=ant-path-matcher

好了,關於Spring Boot 2.6的版本解析到這裡結束了。

最後,再推薦一下我一直在連載的免費教程:Spring Boot教程可以點選直達!

跟很多其他教程不同。這個教程不光兼顧了1.x和2.x版本。同時,對於每次的更新,都會選擇一些相關內容修補Tips,所以對各種不同階段的讀者長期都會有一些收穫。如果你覺得不錯,記得轉發支援一下!

參考資料

好了,今天的學習就到這裡!如果您學習過程中如遇困難?可以加入我們超高質量的Spring技術交流群,參與交流與討論,更好的學習與進步!更多Spring Boot教程可以點選直達!,歡迎收藏與轉發支援!

歡迎關注我的公眾號:程式猿DD,分享外面看不到的乾貨與思考!

相關文章