以下供技術(shù)升級(jí)所使用。建議使用2.3.x或2.4.x。
一、Spring boot各版本特性
2.2.X
- 性能提升
- 默認(rèn)禁用JMX: 縮短應(yīng)用啟動(dòng)時(shí)間,減少資源浪費(fèi)。
- 延遲初始化:通過
spring.main.lazy-initialization屬性啟用全局延遲初始化,以減少啟動(dòng)時(shí)間 - 禁用其他JPA掃描改善了啟動(dòng)性能:SpringBoot已提供了自己的JPA掃描。
- 大型配置文件綁定更快
- 更高效的bean創(chuàng)建和注入
- 支持Java 13
- 被
@ConfigurationProperties注解的類被初始化為bean - RSocket支持
- 支持Gradle 6
- 支持第三方類上的構(gòu)造器參數(shù)綁定
- 依賴變化:
- 所有JavaEE依賴項(xiàng)用等效的Jakarta EE依賴替換。
- Spring Framework 5.2
- JUnit 5
- 其它依賴包升級(jí)
- 配置更改:如
- logging.file屬性已重命名為logging.file.name
- logging.path屬性已重命名為logging.file.path
2.3.X
- 優(yōu)雅停機(jī):在關(guān)閉時(shí),服務(wù)器將不再允許新的請(qǐng)求,并將等待完成的請(qǐng)求給個(gè)寬限期讓它完成,可以通過
spring.lifecycle.timeout-per-shutdown-phase=xxx來配置,默認(rèn)為30s, 默認(rèn)情況下,沒有開啟,通過添加server.shutdown=graceful配置開啟。 - 配置屬性的調(diào)整:可通過
spring-boot-properties-migrator依賴打印替換日志 - 刪除不推薦使用的類/方法/屬性
- 配置文件位置支持通配符:如
/config/*/,只支持jar包外 - web下的日期轉(zhuǎn)換支持配置:
- spring.mvc.format.date
- spring.mvc.format.date-time
- spring.mvc.format.time
- spring.webflux.format.date
- spring.webflux.format.date-time
- spring.webflux.format.time
- 依賴升級(jí)
- 核心依賴升級(jí):
- 第三方類庫升級(jí):
- 支持Java 14
- 嵌入式Servlet Web Server線程配置:
server.xx.threads.max - WebFlux基礎(chǔ)路徑配置:支持
spring.webflux.base-path=xx - 服務(wù)可用性探針:
management.health.probes.enabled=true - Actuator增強(qiáng):
- docker容器支持:
- 支持Cloud Native Buildpacks構(gòu)建鏡像
- maven 插件 增加 spring-boot:build-image 、gradle增加bootBuildImage task 幫助快速構(gòu)建鏡像
- 支持jar 分層,更好的優(yōu)化打包鏡像過程
2.4.X
- 版本命名更改:去除了RELEASE后綴
- 支持Java 15
- Junit 5移除了Vintage Engine
- 配置數(shù)據(jù)導(dǎo)入:通過
spring.config.location和spring.config.import明確指定配置位置,如果不存在,則不會(huì)靜默失敗,如果想忽略不存在,則在前面加optional,如:spring.config.location=optional:/etc/config/application.properties,如果想把所有位置都當(dāng)作optional,可以設(shè)置spring.config.on-not-found=ignore - 嵌入數(shù)據(jù)庫改進(jìn):只有在內(nèi)存中才認(rèn)為數(shù)據(jù)庫是嵌入式的。
- 不再注冊(cè)servlet容器提供的DefaultServlet
- HTTP traces不再包含Cookie請(qǐng)求頭和Set-Cookie響應(yīng)頭
- 構(gòu)建jar自動(dòng)優(yōu)化,自動(dòng)刪除空的starter
- 全新的cron定時(shí)任務(wù)支持:@yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly
- 依賴升級(jí):
- Spring Framework 5.3
- Spring Kafka 2.6
- 第三方依賴升級(jí)
- Undertow 2.2
- Lettuce 6.0
- JUnit 5.7
- Docker支持升級(jí):
- 鏡像發(fā)布:Spring Boot Maven 插件的 spring-boot:build-image 指令和 Gradle 插件的 bootBuildImage 任務(wù)現(xiàn)在可以直接發(fā)布 Docker 鏡像到 Docker 注冊(cè)中心了
- 授權(quán)機(jī)制:使用私有授權(quán)的 Docker 私有注冊(cè)中心,支持用戶名/密碼認(rèn)證以及基于 Token 機(jī)制認(rèn)證。
- 默認(rèn)支持分層jar,減少容器鏡像構(gòu)建
2.5.X
- 運(yùn)行端點(diǎn)變更
- /info不再對(duì)外公開
- 優(yōu)雅關(guān)機(jī)支持GET請(qǐng)求
- 記錄停機(jī)日志
- 增加Quartz的Actuator Endpoint: /actuator/quartz
- 增強(qiáng)容器化功能
- war包支持分層
- buildpack支持配置自定義
- Environment前綴:以便在同一環(huán)境運(yùn)行多個(gè)不同的應(yīng)用,使用
SpringApplication.setEnvironmentPrefix(…)設(shè)置綁定屬性時(shí)要使用的前綴。 - Metrics增強(qiáng)
- HTTP/2 over TCP(h2c): 只需將
server.http2.enabled設(shè)置為true并將server.ssl.enabled設(shè)置為false(默認(rèn)false)。微服務(wù)全棧 h2c 還需要打通 feign 和 RestTemplate 這種 http 客戶端 - 數(shù)據(jù)源相關(guān)增強(qiáng):
二、細(xì)節(jié)
優(yōu)雅停機(jī)
其生效,但其觸發(fā)后,不再接收新請(qǐng)求,在使用slb時(shí)比較方便,但使用eureka時(shí),該方式仍然不夠優(yōu)雅,因?yàn)槠渌?wù)仍然能看到該服務(wù),但該服務(wù)又不可用。
其只解決了當(dāng)前請(qǐng)求完整性
版本支持時(shí)間
- 2.4.x: 支持的版本。2020.11發(fā)布,支持到2022.08
- 2.3.x: 支持的版本。2020.05發(fā)布,支持到2022.02
- 2.2.x:支持的版本。2019.10發(fā)布,支持到2021.07
- 2.1.x:生命已終止的版本。2018.10發(fā)布,于到2020.10月停止維護(hù)
- 2.0.x:生命已終止的版本。2018.3發(fā)布,2019.4停止維護(hù)
- 1.5.x:生命已終止的版本。2017.1發(fā)布,是最后一個(gè)1.x分支,2019.8.1停止維護(hù)