Spring Boot 2.5 重磅發(fā)布,黑暗模式太炸了!
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
前言
距離上次的 Spring Boot 2.4.5 版本發(fā)布剛好一個(gè)月左右,Spring Boot 又發(fā)新版本了!

Spring Boot 又一次性發(fā)布了 3 個(gè)版本:
Spring Boot 2.5.0 Spring Boot 2.4.6 Spring Boot 2.2.13.RELEASE
在這次發(fā)布的 3 個(gè)版本中,Spring Boot 2.5 毫無(wú)疑問(wèn)是最重大的一個(gè)版本,也是近半年發(fā)布的最大版本,上一個(gè) Spring Boot 2.4 版本還是在半年之前。
本文重點(diǎn)介紹下 Spring Boot 2.5.0,另外兩個(gè)版本都是優(yōu)化版本,只是修復(fù)了一些bug,以及文檔優(yōu)化、依賴(lài)升級(jí)等,就沒(méi)什么好介紹的了。
Maven 依賴(lài)先給大家奉上:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<type>pom</type>
</dependency>
需要注意的是,2.4.x 版本開(kāi)始是不帶 .RELEASE 版本后綴的!
Spring Boot 2.5 又帶來(lái)了許多新特性和改進(jìn),快來(lái)看看更新了啥吧!
Spring Boot 2.5 新特性一覽
1、支持 Java 16
我只能說(shuō) Spring Boot 厲害了,Java 16 都開(kāi)始支持了(同時(shí)兼容 Java 8),畢竟 Java 16 才發(fā)布兩個(gè)多月。。
新版本任它發(fā),我們都用 8,所以,雖然現(xiàn)在我們還遠(yuǎn)遠(yuǎn)用不上 Java 16,但 Spring Boot 能支持上就最好不過(guò),這樣對(duì)于那些想基于 Java 16 進(jìn)行學(xué)習(xí)、開(kāi)發(fā)的 Spring Boot 的同鞋就太好了(反正不是我)。
參考:JDK 16 正式發(fā)布,一次性發(fā)布 17 個(gè)新特性
2、支持 Gradle 7
Spring Boot Gradle 插件支持 Gradle 7.0.x,并已針對(duì)其進(jìn)行了測(cè)試。
3、支持 Jetty 10
Spring Boot 2.5 現(xiàn)在支持 Jetty 10 內(nèi)嵌了,因?yàn)?Jetty 10 需要依賴(lài) Java 11,所以現(xiàn)在默認(rèn)還是保持在 Jetty 9。
4、支持 HTTP/2 over TCP (h2c)
Spring Boot 2.5 所有內(nèi)置的容器都可以支持 HTTP/2 over TCP (h2c),而無(wú)需進(jìn)行任何手動(dòng)定制。
5、新的數(shù)據(jù)源初始化機(jī)制
1)數(shù)據(jù)源調(diào)整
Spring Boot 2.5 中的某些數(shù)據(jù)源初始化的方法被重新設(shè)計(jì)了,下面的數(shù)據(jù)源參數(shù)配置也被廢除了:
spring.datasource.*
新的數(shù)據(jù)源參數(shù)配置如下:
spring.sql.init.*
這個(gè)改動(dòng)還挺大的,沒(méi)事亂改啥參數(shù),個(gè)人覺(jué)得之前的沒(méi)毛病!
2)Flyway 和 Liquibase 調(diào)整
這兩個(gè)是主流的數(shù)據(jù)庫(kù)版本管理工具,使用 spring.flyway.url 和 spring.liquibase.url 定義的時(shí)候需要加上 username/ password 進(jìn)行認(rèn)證。
早期的版本中,這些參數(shù)都是從 spring.datasource 中派生的,用戶(hù)在自定義數(shù)據(jù)源的時(shí)候會(huì)存在問(wèn)題。
另外,如果使用了自定義數(shù)據(jù)源和 Liquibase 一起使用,現(xiàn)在會(huì)使用 SimpleDriverDataSource 數(shù)據(jù)源類(lèi)進(jìn)行配置,之前的版本使用的是池化數(shù)據(jù)源,會(huì)導(dǎo)致數(shù)據(jù)源初始化效率低下。
6、環(huán)境變量前綴
Spring Boot 2.5 可以為系統(tǒng)環(huán)境變量指定前綴了,這樣可以方便我們?cè)谕画h(huán)境中運(yùn)行多個(gè)不同的 Spring Boot 應(yīng)用,而不用受重名環(huán)境變量沖突。
使用方法如下:
SpringApplication application = new SpringApplication(Javastack.class);
application.setEnvironmentPrefix("javastack");
application.run(args);
這樣設(shè)置一下的話,所有 javastack-* 開(kāi)頭的系統(tǒng)環(huán)境變量才會(huì)被綁定。
比如:
javastack-id
javastack-name
javastack-age
7、增強(qiáng) Docker 映像構(gòu)建
Spring Boot Maven/ Gradle 插件現(xiàn)在都開(kāi)始支持:
1)都支持自定義構(gòu)建包;
2)都支持 Docker 構(gòu)建包時(shí)傳遞卷數(shù)據(jù)(volume)綁定;
3)都支持打包可執(zhí)行的 war 文件到 Docker 映像中;
8、Layered WARs
Spring Boot Maven 和 Gradle 插件現(xiàn)在可以創(chuàng)建分層的 WAR 了,分層 WAR 與 Spring Boot 2.3 版本中提供的分層 JAR 工作方式類(lèi)似,為了可以更好的與 Docker 映像一起使用,提升構(gòu)建速度。
這個(gè)我后續(xù)再更新一篇吧,想學(xué)習(xí)接收最新推送,請(qǐng)持續(xù)關(guān)注微信公眾號(hào):Java技術(shù)棧,公眾號(hào)第一時(shí)間推送。
9、相關(guān)端點(diǎn)和指標(biāo)變更
1)現(xiàn)在 /info actuator 端點(diǎn)不再默認(rèn)開(kāi)放了,如果使用了 Spring Security 的話,這個(gè)端點(diǎn)還需要身份認(rèn)證才能訪問(wèn),加強(qiáng) info 端點(diǎn)的安全性;
2)新增了 /quartz 端點(diǎn),這個(gè)端點(diǎn)提供了 Quartz 作業(yè)和觸發(fā)器相關(guān)的的詳細(xì)數(shù)據(jù);
3)為 /startup 端點(diǎn)支持 get 請(qǐng)求,與 post 請(qǐng)求不同的是,get 請(qǐng)求的端點(diǎn)不會(huì)釋放事件緩沖區(qū),而且事件將繼續(xù)保留在內(nèi)存中;
4)為 /actuator/prometheus 端點(diǎn)提供標(biāo)準(zhǔn) Prometheus 以及 OpenMetrics 響應(yīng);
5)為 Spring Data repositories 生成 Micrometer 指標(biāo);
6)自動(dòng)生成 MongoDB 連接池、客戶(hù)端命令相關(guān)指標(biāo);
10、官方文檔界面和功能更新,還支持黑暗模式
Spring 項(xiàng)目首頁(yè)黑暗模式:

Spring Boot 文檔黑暗模式:

這個(gè)功能太炸了,有了黑暗模式,Java 程序員同鞋們?cè)僖膊慌峦砩习疽箤W(xué)習(xí) Spring Boot 了,如果你說(shuō)你的電腦本來(lái)就支持,那當(dāng)然沒(méi)問(wèn)題,但是原生支持可能兼容性更好。。
另外棧長(zhǎng)順便看了下 Spring / Spring Cloud 的文檔,目前還不支持黑暗模式,估計(jì)后面所有項(xiàng)目文檔都會(huì)支持上。
Spring Boot 2.5 依賴(lài)升級(jí)
升級(jí)了一系列依賴(lài)的 Spring 項(xiàng)目版本:
Spring Data 2021.0 Spring HATEOAS 1.3 Spring Integration 5.5 Spring Kafka 2.7 Spring Retry 1.3 Spring Security 5.5 Spring Session 2021.0
升級(jí)了一系列依賴(lài)的第三方依賴(lài)庫(kù):
Kotlin 1.5 Groovy 3.0 Flyway 7.7 Liquibase 4.2 Jackson 2.12 Kafka 2.7 Cassandra Driver 4.10 Embedded Mongo 3.0 Hibernate Validator 6.2 Jersey 2.33 Mockito 3.7 MongoDB 4.2 JUnit Jupiter 5.7 Elasticsearch 7.12
Spring Boot 2.5 功能廢除
1)移除 Spring Data Solr 相碰的自動(dòng)配置,由于 Spring Data 2021.0.0 已經(jīng)將其移除了;
2)移除了 org.springframework.boot.actuate.endpoint.http 包下的 ActuatorMediaType 和 ApiVersion 類(lèi);
3)jOOQ’s *Provider 的相關(guān)回調(diào)接口實(shí)現(xiàn)和設(shè)置已經(jīng)被棄用,現(xiàn)在應(yīng)該改用 DefaultConfigurationCustomizer 配置類(lèi);
4)org.springframework.boot.autoconfigure.data.jpa 包下的 EntityManagerFactoryDependsOnPostProcessor 類(lèi)被移到了 org.springframework.boot.autoconfigure.orm.jpa 包下;
總結(jié)
終于寫(xiě)完了,又肝了一個(gè)周末!!
可以看出 Spring Boot 2.5 的變更還是蠻大的,特別是新的數(shù)據(jù)源機(jī)制、相關(guān)端點(diǎn)的變更,還有許多框架的重大版本升級(jí)。
切記不要輕易升級(jí)到這個(gè)版本,如需升級(jí),最好是詳細(xì)看清楚變更內(nèi)容,做好充分測(cè)試,以免年終獎(jiǎng)沒(méi)了。。
后續(xù)棧長(zhǎng)有時(shí)間再深入研究下更多的細(xì)節(jié),給大家?guī)?lái)更詳細(xì)的技術(shù)文章,關(guān)注公眾號(hào)Java技術(shù)棧第一時(shí)間推送。
最后,大家覺(jué)得本文有用的話,動(dòng)動(dòng)小手,給棧長(zhǎng)來(lái)個(gè)小小的在看、轉(zhuǎn)發(fā)唄,原創(chuàng)不易,需要你的鼓勵(lì)哦~
更多請(qǐng)參考官方文檔:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Release-Notes
版權(quán)申明:本文系公眾號(hào) "Java技術(shù)棧" 原創(chuàng),原創(chuàng)實(shí)屬不易,轉(zhuǎn)載、引用本文內(nèi)容請(qǐng)注明出處,禁止抄襲、洗稿,請(qǐng)自重,尊重他人勞動(dòng)成果和知識(shí)產(chǎn)權(quán)。






關(guān)注Java技術(shù)棧看更多干貨


