昨天,Spring官方正式釋出了Spring Boot今年最後一個特性版本:2.6.0
同時,也宣佈了2.4.x版本的終結。
那麼這個新版本又帶來了哪些新特性呢?下面就一起跟著DD來看看吧!
重要特性
1. Servlet應用支援在 Cookie 中配置 SameSite 屬性
該屬性可通過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,所以對各種不同階段的讀者長期都會有一些收穫。如果你覺得不錯,記得轉發支援一下!
參考資料
- https://spring.io/blog/2021/11/19/spring-boot-2-6-is-now-available
- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6.0-Configuration-Changelog
- https://www.oschina.net/news/169783/spring-boot-2-6-0-released
好了,今天的學習就到這裡!如果您學習過程中如遇困難?可以加入我們超高質量的Spring技術交流群,參與交流與討論,更好的學習與進步!更多Spring Boot教程可以點選直達!,歡迎收藏與轉發支援!
歡迎關注我的公眾號:程式猿DD,分享外面看不到的乾貨與思考!