Spring Boot 2.0 新特性和發(fā)展方向

springboot

以 Java 8 為基準(zhǔn)
Spring Boot 2.0 要求 Java 版本必須 8 以上, Java 6 和 7 不再支持。

內(nèi)嵌容器包結(jié)構(gòu)調(diào)整

為了支持 reactive 使用場景,內(nèi)嵌的容器包結(jié)構(gòu)被重構(gòu)了的幅度有點(diǎn)大。
EmbeddedServletContainer 被重命名為 WebServer,并且 
org.springframework.boot.context.embedded 包被重定向到了 
org.springframework.boot.web.embedded 包下。舉個例子,如果你要使用 
TomcatEmbeddedServletContainerFactory 回調(diào)接口來自定義內(nèi)嵌 Tomcat 容器,
你現(xiàn)在應(yīng)該使用 TomcatServletWebServerFactory。

Servlet-specific 的 server properties 調(diào)整

大量的 Servlet 專屬的 server.* properties 被移到了 server.servlet 下:

Server

由此可以看出一些端倪,那就是 server 不再是只有 servlet 了,還有其他的要加入。

Actuator 默認(rèn)映射

Actuator 的端點(diǎn)(endpoint)現(xiàn)在默認(rèn)映射到 /application,
比如,/info 端點(diǎn)現(xiàn)在就是在 /application/info。但你可以使用 management.context-path 來覆蓋此默認(rèn)值。

@ConditionalOnBean

@ConditionalOnBean 現(xiàn)在的判斷條件由 OR 變?yōu)榱?AND。

Remote CRaSH shell

1.5 的時候此遠(yuǎn)程工具被標(biāo)為 deprecated,2.0 的時候?qū)堰@個支持徹底 remove 掉,以及基于此功能的項(xiàng)目也會被刪除掉。

Spring Loaded 不再支持

由于 Spring Loaded 項(xiàng)目已被移到了 attic 了,所以不再支持 Spring Loaded 了?,F(xiàn)在建議你去使用 Devtools。Spring Loaded 不再支持了。

Hazelcast 自動配置不再支持

不能再自動配置 HazelcastInstance 進(jìn)行緩存。 因此,spring.cache.hazelcast.config 屬性不再可用。

默認(rèn) connection pool 變了

默認(rèn)的連接池已經(jīng)由 Tomcat 切換到了 HikariCP。如果你過去使用 spring.datasource.type 在基于 Tomcat 的應(yīng)用程序中強(qiáng)制使用 Hikari,現(xiàn)在你可以刪除這個覆蓋了。同樣的,如果想要使用 Tomcat 的連接池,只需要簡單的加入以下配置就可以了:

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

Servlet Filters

針對一個 Filter 默認(rèn)的 dispatcher 類型現(xiàn)在為 DipatcherType.REQUEST,這樣就保證了 Spring Boot 和 Servlet 默認(rèn)的配置統(tǒng)一了。

Spring Security

Spring Security 的 filter 現(xiàn)在可以自動配置如下類型了: ASYNC, ERROR, and REQUEST 。這樣就讓 Spring Boot 中的配置和 Spring Security 默認(rèn)配置保持一致了。

Spring Session

Spring Session 的 filter 現(xiàn)在支持自動配置如下 dispatcher 類型 ASYNC, ERROR, and REQUEST 。同樣是為了讓 Spring Boot 的配置與 Spring Session 的默認(rèn)配置保持一致。值得注意的是從 Spring Session 2.0 起, Mongo 和 GemFire 將不再被支持。

Jetty

要求 Jetty 最低版本為 9.4。

Tomcat

要求 Tomcat 最低版本為 8.5。

Hibernate

要求 Hibernate 最低版本為 5.2。

Gradle

要求 Gradle 最低版本為 3.4。

SendGrid

SendGrid 最低支持版本是 3.2。為了支持這次升級,username 和 password 已經(jīng)被干掉了。因?yàn)?API key 現(xiàn)在是唯一支持的認(rèn)證方式。

Starter 的傳遞依賴的改變

以前有幾個 Spring Boot starter 是依靠 Spring MVC 和 spring-boot-starter-web 傳遞的。
為了對 Spring WebFlux 的支持,
spring-boot-starter-mustache 和 spring-boot-starter-thymeleaf 不再依賴 spring-boot-starter-web。
現(xiàn)在你要自己選擇并添加 spring-boot-starter-web 或 spring-boot-starter-webflux 作為依賴。

記?。簑eb 和 webflux 是平行的關(guān)系。我們之前的文章中提到過 spring webflux。你可以移步查看:Spring 5 新增全新的 reactive web 框架:webflux。

Solr 健康指標(biāo)

針對 Solr 的健康檢查信息不再是 solrStatus 這個屬性了?,F(xiàn)在是 status property,是一個標(biāo)準(zhǔn)狀態(tài)屬性,對應(yīng)于一個的整型值。

默認(rèn)代理策略

Spring Boot 現(xiàn)在默認(rèn)是使用 CGLIB 代理,同時包含 AOP 支持。如果你需要基于代理(proxy-based)的代理策略,你需要把 spring.aop.proxy-target-class 設(shè)置為 false。

基于 CLI 的測試

從 Spring Boot 的 CLI 中刪除了測試支持,現(xiàn)在建議你使用 Maven 或 Gradle 構(gòu)建應(yīng)用程序,去使用它們提供的豐富的測試支持吧。

@ConfigurationProperties

@ConfigurationProperties 里的 ignoreNestedProperties 屬性已被刪除。

Multipart 配置改變

為了更好的反映 Servlet 的特性, spring.http.multipart. 屬性已經(jīng)被命名為 spring.servlet.multipart。

ps:其實(shí)就是因?yàn)?webflux 來了,只能把 servlet 和 webflux 區(qū)分開來。

Mustache 模板默認(rèn)文件擴(kuò)展名

過去 Mustache 模板的默認(rèn)的文件擴(kuò)展名是.html?,F(xiàn)在.mustache 成了官方指定的擴(kuò)展名,而且很多的 IDE 插件已經(jīng)支持了此后綴。你可以通過 spring.mustache.suffix 來覆蓋現(xiàn)在的默認(rèn)的支持。

Spring Framework 5.0

Spring Boot 2.0 是建立在 Spring Framework 5.0 之上的(最低要求)。Spring 5 最大的亮點(diǎn)就是 reactive。

松綁定改善

松綁定已經(jīng)得到改善。這里簡單的舉個例子:

簡單的屬性在刪除特殊字符然后轉(zhuǎn)成小寫后進(jìn)行綁定。比如:

下面的屬性最終都會被映射為 spring.jpa.databaseplatform=mysql:

spring.jpa.database-platform=mysql

spring.jpa.databasePlatform=mysql

spring.JPA.database_platform=mysql

有關(guān)詳細(xì)信息,我們可以查閱:https://github.com/spring-projects/spring-boot/wiki/Relaxed-Binding-2.0

WebFlux 和 WebFlux.fn 支持

Spring Boot 2.0 提供了一個新的 starter ,用來支持 Reactive Spring web frameworks。該 starter 為 spring-boot-starter-webflux。其中 Reactor Netty 是默認(rèn)的 web 引擎(spring-boot-starter-reactor-netty)。

Reactive 數(shù)據(jù)庫支持

Spring Boot 2.0 對一下的數(shù)據(jù)庫提供了自動配置( auto-configuration )的 reactive 的支持:

*   MongoDB (spring-boot-starter-data-mongodb-reactive)
*   Redis (spring-boot-starter-data-redis-reactive)
*   Cassandra (spring-boot-starter-data-cassandra-reactive)

@DataMongoTest 測試注解也是支持 reactive 的。

@WebFluxTest 支持

Reactive controller 現(xiàn)在可以使用 @WebFluxTest 來測試。它提供的功能和 @WebMvcTest 類似。而且 WebTestClient 可以直接使用,已經(jīng)被自動配置(auto-configured)了。

支持使用 @SpringBootTest 自動配置 WebTestClient

當(dāng)你使用 @SpringBootTest with an actual server (that is, either DEFINEDPORT or RANDOMPORT), a WebTestClient is available the same way TestRestTemplate is.

使用 @SpringBootTest 進(jìn)行 WebTestClient 自動配置

將 @SpringBootTest 用于實(shí)際服務(wù)器(即 DEFINEDPORT 或 RANDOMPORT)時,
    WebTestClient 的可用方式與 TestRestTemplate 相同。

Gradle 插件

Spring Boot 的 Gradle 插件已在很大程度上被重寫,以實(shí)現(xiàn)一些重大的改進(jìn)。有關(guān)這方面的就不細(xì)講了,感興趣的同學(xué)可以去一探究竟。

/loggers 端點(diǎn) POST 的狀態(tài)碼改變

針對 /loggers 端點(diǎn)上 POST 操作的狀態(tài)碼已又 200 改為 204。

Elasticsearch

Elasticsearch 已升級到 5.4。 與 Elastic 公司宣布不再支持嵌入式 Elasticsearch 的情況一樣,NodeClient 的自動配置已被刪除。就是這么的節(jié)奏一致?,F(xiàn)在你可以通過使用 `spring.data.elasticsearch.cluster-nodes 自動配置 TransportClient,具體 value 可以是一個或多個要連接的節(jié)點(diǎn)的地址。

Quartz Scheduler

Spring Boot 2 針對 Quartz 調(diào)度器提供了支持。你可以加入 spring-boot-starter-quartz starter 來啟用。而且支持基于內(nèi)存和基于 jdbc 兩種存儲。

Spring Data Web 配置

Spring Boot 公開了一個新的 spring.data.web 配置名稱空間,可以輕松配置分頁和排序。

Json starter

一個全新的 spring-boot-starter-json starter 聚合了很多常用的 json 工具,可以支持對 json 的讀寫。
它不僅僅提供了 jackson-databind 而且當(dāng)你使用 java8 時候,
還提供了有用的模塊:
jackson-datatype-jdk8, jackson-datatype-jsr310 和 jackson-module-parameter-names。
之前使用 jackson-databind 的地方就可以使用這個新的 starter 了。

Thymeleaf starter

Thymeleaf starter 現(xiàn)在包含了 thymeleaf-extras-java8time,開箱即用。

InfluxDB

如果 InfluxDB java client 和 the spring.influx.url 被設(shè)置, 一個 InfluxDB client 現(xiàn)在就會被自動配置。而且現(xiàn)在支持認(rèn)證。

JdbcTemplate

Spring Boot 自動配置(auto-configuration)的 JdbcTemplate 現(xiàn)在可以通過 spring.jdbc.template 命名空間進(jìn)行定制。 此外,自動配置(auto-configuration)的 NamedParameterJdbcTemplate 在底層就是 JdbcTemplate。

jOOQ

Spring Boot 現(xiàn)在可以根據(jù) DataSource 自動檢測出 jOOQ 方言(類似于 JPA 方言)。

此外,還引入了 @JooqTest 用于只有 jOOQ 才能 hold 的測試場景。

@DataRedisTest

新加了一個測試的時候針對 redis 的新注解。

強(qiáng)大的 Mongo 客戶端自定義

現(xiàn)在可以通過 MongoClientSettingsBuilderCustomizer 這個 bean 來高度定制化 Spring Boot 的 Mongo 客戶端。

Cassandra

spring.data.cassandra 現(xiàn)在支持池化(pooling)。

Kafka listener 支持批量消費(fèi)

現(xiàn)在支持一次性批量消費(fèi)多個 ConsumerRecord,你可以創(chuàng)建一批的監(jiān)聽器(listener),這樣設(shè)置:

spring.kafka.listener.type=batch

Web filters 初始化

Web filters 現(xiàn)在在所有支持的容器中都會被立刻初始化。也就是 eagerly,急加載。

Auto-configuration 報告

現(xiàn)在不滿足條件(unconditional)的 class 也會被包含進(jìn)來,在自動配置(auto-configuration)的 Actuator 端點(diǎn)的 response 中一并返回。

重置 logger 操作

現(xiàn)在 Loggers 端點(diǎn)(endpoint) 支持 reset 日志級別到默認(rèn)設(shè)置。

Maven 插件屬性

插件的配置屬性現(xiàn)在的暴露方式有所改變,現(xiàn)在所有的都是以 spring-boot 為前綴,這是為了避免和其他插件沖突而導(dǎo)致錯誤。

比如,以下命令行可以啟用 profile foo:

mvn spring-boot:run -Dspring-boot.run.profiles=foo

Devtools 遠(yuǎn)程調(diào)試

已經(jīng)從 Devtools 中刪除了通過 HTTP 進(jìn)行遠(yuǎn)程調(diào)試的支持。(#9489)

Jetty

為了和 Tomcat 和 Undertow 看齊,現(xiàn)在對 Jetty 的所有的 http method 的請去都進(jìn)行壓縮,而不是之前那樣只對 GET request 進(jìn)行壓縮(#8184)。

Reactive server 自定義

當(dāng)配置一個 reactive web server 時,針對 Jetty,Tomcat,Undertow 的定制化器現(xiàn)在會被調(diào)用 (#9572)。

Jolokia

Jolokia 不再是一個 endpoint。并且默認(rèn)是禁用的,這已和其他的 web 端點(diǎn)保持了一直。它的配置已轉(zhuǎn)移到了 management.jolokia。如果想啟用 Jolokia, 向你的配置加入 management.jolokia.enabled=true 就可以了。

數(shù)據(jù)庫遷移

Liquibase 和 Flyway 配置的 key 已被轉(zhuǎn)移到了 spring 的命名空間下:(比如: spring.liquibase and spring.flyway )。

Auto-configuration 排序

@AutoConfigureOrder 默認(rèn)值由 Ordered.LOWEST_PRECEDENCE 變?yōu)?0。 (#10142)

Auto-configuration 測試工具

一個新的 ApplicationContextRunner 測試工具讓我們測試自動配置變得容易。 未來將會把所有的測試套件都遷移到這個模型上。

Java 9 支持

基本支持了 Java 9。之所以是“基本”,是因?yàn)檫€沒得到用戶的驗(yàn)證。

Jedis 變?yōu)榱?Lettuce

Redis 客戶端驅(qū)動現(xiàn)在由 Jedis 變?yōu)榱?Lettuce。使用 Jedis 的同學(xué)們,大概知道方向了吧。

但仍然支持 Jedis,那么 exclude 掉 io.lettuce:lettuce-core,然后添加 redis.clients:jedis 就是了。

OAuth 2.0 支持

Spring Security OAuth 項(xiàng)目中的功能將會遷移到 Spring Security 中。將會 OAuth 2.0。

Mockito 1.x

Mockito 1.x 不再支持 @MockBean 和 @SpyBean。 
如果你不使用 spring-boot-starter-test 來管理依賴關(guān)系,則應(yīng)升級到 Mockito 2.x。

JSON-B 支持

除了 Jackson 和 Gson,現(xiàn)在還支持了 JSON-B 。JSON 測試支持也已更新為新的 JsonbTester 類。

Session Endpoint

Spring Session 用現(xiàn)在可以通過 /application/sessions Actuator Endpoint 進(jìn)行查找和刪除 session。

ConfigurationProperties 驗(yàn)證

如果你希望 @ConfigurationProperties 對象上開啟驗(yàn)證,那么只需要添加 @Validated 就可以了。

Spring Mobile

針對 Spring Mobile 的自動配置和依賴不再支持,已被刪除。

Spring WebFlux 支持錯誤約定

Spring Boot 現(xiàn)在讓 WebFlux 的錯誤約定和 MVC 保持一致就像使用 MVC 一樣:默認(rèn)視圖和 JSON 響應(yīng)錯誤,自定義錯誤視圖等等。

TLS 配置 和 HTTP/2 支持

你現(xiàn)在可以為你的 WebFlux 應(yīng)用配置 SSL,使用 server.ssl.* 配置屬性。
Tomcat, Jetty, Undertow 和 Reactor Netty 都支持。

你現(xiàn)在也可以為你的 MVC 或 WebFlux 應(yīng)用配置 HTTP/2:

使用 server.http2.enabled。

@KafkaListener支持使用@SendTo

使用了自動配置工廠的 Kafka listener 現(xiàn)在支持 @SendTo。

Kotlin 擴(kuò)展

Spring Boot 2.0 發(fā)布了 Kotlin runApplication 擴(kuò)展:

package com.example.demo

import org.springframework.boot.autoconfigure.SpringBootApplication

import org.springframework.boot.runApplication

@SpringBootApplication

class DemoApplication

fun main(args: Array) {
runApplication(*args)
}

Job command line runner 順序

CommandLineRunner 現(xiàn)在執(zhí)行批處理 job 的啟動 order 是 0。

支持自動配置的模板化歡迎頁

Spring Boot 2.0 現(xiàn)在支持靜態(tài)和模板化兩種歡迎頁類型。它會首先去配置好的靜態(tài)內(nèi)容的目錄下查找 index.html 文件,如果沒找到,然后就去查找 index 模板。 只要找到了一個就會被用作歡迎頁。

Context path 會在啟動時被打印

在 Spring Boot 之前的版本中,對 context path 貌似并沒有那么的重視一樣?,F(xiàn)在當(dāng)我們使用內(nèi)嵌容器的時候, context path 會被打印在 HTTP 端口的旁邊,像這樣:

Tomcat started on port(s): 8080 (http) with context path ‘/foo’

測試優(yōu)化,自動掃描 Converter 和 GenericConverter

Converter 和 GenericConverter beans 現(xiàn)在可以被 @WebMvcTest 和 @WebFluxTest 自動掃描到了。

Health vs. Status

status endpoint 已經(jīng)被刪除了,現(xiàn)在改成了 health。這個 health 端點(diǎn)既可以展示 status 也可以有更多的細(xì)節(jié)。 health 端點(diǎn)現(xiàn)在默認(rèn)是被暴露的(只展示 status)。如果你希望展示更多的細(xì)節(jié)信息,可以通過修改屬性 management.endpoints.health.show-details來實(shí)現(xiàn):

management.endpoints.health.show-details=true

原文鏈接:代碼灣-Spring Boot 2.0 新特性和發(fā)展方向

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容