以 Java 8 爲基準html
Spring Boot 2.0 要求 Java 版本必須 8 以上, Java 6 和 7 再也不支持。java
內嵌容器包結構調整node
爲了支持 reactive 使用場景,內嵌的容器包結構被重構了的幅度有點大。EmbeddedServletContainer 被重命名爲 WebServer,而且 org.springframework.boot.context.embedded 包被重定向到了 org.springframework.boot.web.embedded 包下。舉個例子,若是你要使用 TomcatEmbeddedServletContainerFactory 回調接口來自定義內嵌 Tomcat 容器,你如今應該使用 TomcatServletWebServerFactory。mysql
Servlet-specific 的 server properties 調整react
大量的 Servlet 專屬的 server.* properties 被移到了 server.servlet 下:git
由此能夠看出一些端倪,那就是 server 再也不是隻有 servlet 了,還有其餘的要加入。github
Actuator 默認映射web
Actuator 的端點(endpoint)如今默認映射到 /application,好比,/info 端點如今就是在 /application/info。但你可使用 management.context-path 來覆蓋此默認值。redis
@ConditionalOnBeanspring
@ConditionalOnBean 如今的判斷條件由 OR 變爲了 AND。
Remote CRaSH shell
1.5 的時候此遠程工具被標爲 deprecated,2.0 的時候將會把這個支持完全 remove 掉,以及基於此功能的項目也會被刪除掉。
Spring Loaded 再也不支持
因爲 Spring Loaded 項目已被移到了 attic 了,因此再也不支持 Spring Loaded 了。如今建議你去使用 Devtools。Spring Loaded 再也不支持了。
Hazelcast 自動配置再也不支持
不能再自動配置 HazelcastInstance 進行緩存。 所以,spring.cache.hazelcast.config 屬性再也不可用。
默認 connection pool 變了
默認的鏈接池已經由 Tomcat 切換到了 HikariCP。若是你過去使用 spring.datasource.type 在基於 Tomcat 的應用程序中強制使用 Hikari,如今你能夠刪除這個覆蓋了。一樣的,若是想要使用 Tomcat 的鏈接池,只須要簡單的加入如下配置就能夠了:
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
Servlet Filters
針對一個 Filter 默認的 dispatcher 類型如今爲 DipatcherType.REQUEST,這樣就保證了 Spring Boot 和 Servlet 默認的配置統一了。
Spring Security
Spring Security 的 filter 如今能夠自動配置以下類型了: ASYNC, ERROR, and REQUEST 。這樣就讓 Spring Boot 中的配置和 Spring Security 默認配置保持一致了。
Spring Session
Spring Session 的 filter 如今支持自動配置以下 dispatcher 類型 ASYNC, ERROR, and REQUEST 。一樣是爲了讓 Spring Boot 的配置與 Spring Session 的默認配置保持一致。值得注意的是從 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 已經被幹掉了。由於 API key 如今是惟一支持的認證方式。
Starter 的傳遞依賴的改變
之前有幾個 Spring Boot starter 是依靠 Spring MVC 和 spring-boot-starter-web 傳遞的。 爲了對 Spring WebFlux 的支持,spring-boot-starter-mustache 和 spring-boot-starter-thymeleaf 再也不依賴 spring-boot-starter-web。如今你要本身選擇並添加 spring-boot-starter-web 或 spring-boot-starter-webflux 做爲依賴。
Solr 健康指標
針對 Solr 的健康檢查信息再也不是 solrStatus 這個屬性了。如今是 status property,是一個標準狀態屬性,對應於一個的整型值。
默認代理策略
Spring Boot 如今默認是使用 CGLIB 代理,同時包含 AOP 支持。若是你須要基於代理(proxy-based)的代理策略,你須要把 spring.aop.proxy-target-class 設置爲 false。
基於 CLI 的測試
從 Spring Boot 的 CLI 中刪除了測試支持,如今建議你使用 Maven 或 Gradle 構建應用程序,去使用它們提供的豐富的測試支持吧。
@ConfigurationProperties
@ConfigurationProperties 裏的 ignoreNestedProperties 屬性已被刪除。
Multipart 配置改變
爲了更好的反映 Servlet 的特性, spring.http.multipart. 屬性已經被命名爲 spring.servlet.multipart。
ps:其實就是由於 webflux 來了,只能把 servlet 和 webflux 區分開來。
Mustache 模板默認文件擴展名
過去 Mustache 模板的默認的文件擴展名是.html。如今.mustache 成了官方指定的擴展名,並且不少的 IDE 插件已經支持了此後綴。你能夠經過 spring.mustache.suffix 來覆蓋如今的默認的支持。
Spring Framework 5.0
Spring Boot 2.0 是創建在 Spring Framework 5.0 之上的(最低要求)。Spring 5 最大的亮點就是 reactive。
鬆綁定改善
鬆綁定已經獲得改善。這裏簡單的舉個例子:
簡單的屬性在刪除特殊字符而後轉成小寫後進行綁定。好比:
下面的屬性最終都會被映射爲 spring.jpa.databaseplatform=mysql:
spring.jpa.database-platform=mysql
spring.jpa.databasePlatform=mysql
spring.JPA.database_platform=mysql
有關詳細信息,咱們能夠查閱: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 是默認的 web 引擎(spring-boot-starter-reactor-netty)。
Reactive 數據庫支持
Spring Boot 2.0 對一下的數據庫提供了自動配置( 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 如今可使用 @WebFluxTest 來測試。它提供的功能和 @WebMvcTest 相似。並且 WebTestClient 能夠直接使用,已經被自動配置(auto-configured)了。
支持使用 @SpringBootTest 自動配置 WebTestClient
當你使用 @SpringBootTest with an actual server (that is, either DEFINEDPORT or RANDOMPORT), a WebTestClient is available the same way TestRestTemplate is.
使用 @SpringBootTest 進行 WebTestClient 自動配置
將 @SpringBootTest 用於實際服務器(即 DEFINEDPORT 或 RANDOMPORT)時,WebTestClient 的可用方式與 TestRestTemplate 相同。
Gradle 插件
Spring Boot 的 Gradle 插件已在很大程度上被重寫,以實現一些重大的改進。有關這方面的就不細講了,感興趣的同窗能夠去一探究竟。
/loggers 端點 POST 的狀態碼改變
針對 /loggers 端點上 POST 操做的狀態碼已又 200 改成 204。
Elasticsearch
Elasticsearch 已升級到 5.4。 與 Elastic 公司宣佈再也不支持嵌入式 Elasticsearch 的狀況同樣,NodeClient 的自動配置已被刪除。就是這麼的節奏一致。如今你能夠經過使用 spring.data.elasticsearch.cluster-nodes 自動配置 TransportClient,具體 value 能夠是一個或多個要鏈接的節點的地址。
Quartz Scheduler
Spring Boot 2 針對 Quartz 調度器提供了支持。你能夠加入 spring-boot-starter-quartz starter 來啓用。並且支持基於內存和基於 jdbc 兩種存儲。
Spring Data Web 配置
Spring Boot 公開了一個新的 spring.data.web 配置名稱空間,能夠輕鬆配置分頁和排序。
Json starter
一個全新的 spring-boot-starter-json starter 聚合了不少經常使用的 json 工具,能夠支持對 json 的讀寫。
它不只僅提供了 jackson-databind 並且當你使用 java8 時候,還提供了有用的模塊:jackson-datatype-jdk8, jackson-datatype-jsr310 和 jackson-module-parameter-names。
以前使用 jackson-databind 的地方就可使用這個新的 starter 了。
Thymeleaf starter
Thymeleaf starter 如今包含了 thymeleaf-extras-java8time,開箱即用。
InfluxDB
若是 InfluxDB java client 和 the spring.influx.url 被設置, 一個 InfluxDB client 如今就會被自動配置。並且如今支持認證。
JdbcTemplate
Spring Boot 自動配置(auto-configuration)的 JdbcTemplate 如今能夠經過 spring.jdbc.template 命名空間進行定製。 此外,自動配置(auto-configuration)的 NamedParameterJdbcTemplate 在底層就是 JdbcTemplate。
jOOQ
Spring Boot 如今能夠根據 DataSource 自動檢測出 jOOQ 方言(相似於 JPA 方言)。
此外,還引入了 @JooqTest 用於只有 jOOQ 才能 hold 的測試場景。
@DataRedisTest
新加了一個測試的時候針對 redis 的新註解。
強大的 Mongo 客戶端自定義
如今能夠經過 MongoClientSettingsBuilderCustomizer 這個 bean 來高度定製化 Spring Boot 的 Mongo 客戶端。
Cassandra
spring.data.cassandra 如今支持池化(pooling)。
Kafka listener 支持批量消費
如今支持一次性批量消費多個 ConsumerRecord,你能夠建立一批的監聽器(listener),這樣設置:
spring.kafka.listener.type=batch
Web filters 初始化
Web filters 如今在全部支持的容器中都會被馬上初始化。也就是 eagerly,急加載。
Auto-configuration 報告
如今不知足條件(unconditional)的 class 也會被包含進來,在自動配置(auto-configuration)的 Actuator 端點的 response 中一併返回。
重置 logger 操做
如今 Loggers 端點(endpoint) 支持 reset 日誌級別到默認設置。
Maven 插件屬性
插件的配置屬性如今的暴露方式有所改變,如今全部的都是以 spring-boot 爲前綴,這是爲了不和其餘插件衝突而致使錯誤。
好比,如下命令行能夠啓用 profile foo:
mvn spring-boot:run -Dspring-boot.run.profiles=foo
Devtools 遠程調試
已經從 Devtools 中刪除了經過 HTTP 進行遠程調試的支持。(#9489)
Jetty
爲了和 Tomcat 和 Undertow 看齊,如今對 Jetty 的全部的 http method 的請去都進行壓縮,而不是以前那樣只對 GET request 進行壓縮(#8184)。
Reactive server 自定義
當配置一個 reactive web server 時,針對 Jetty,Tomcat,Undertow 的定製化器如今會被調用 (#9572)。
Jolokia
Jolokia 再也不是一個 endpoint。而且默認是禁用的,這已和其餘的 web 端點保持了一直。它的配置已轉移到了 management.jolokia。若是想啓用 Jolokia, 向你的配置加入 management.jolokia.enabled=true 就能夠了。
數據庫遷移
Liquibase 和 Flyway 配置的 key 已被轉移到了 spring 的命名空間下:(好比: spring.liquibase and spring.flyway )。
Auto-configuration 排序
@AutoConfigureOrder 默認值由 Ordered.LOWEST_PRECEDENCE 變爲 0。 (#10142)
Auto-configuration 測試工具
一個新的 ApplicationContextRunner 測試工具讓咱們測試自動配置變得容易。 將來將會把全部的測試套件都遷移到這個模型上。
Java 9 支持
基本支持了 Java 9。之因此是「基本」,是由於還沒獲得用戶的驗證。
Jedis 變爲了 Lettuce
Redis 客戶端驅動如今由 Jedis 變爲了 Lettuce。使用 Jedis 的同窗們,大概知道方向了吧。
但仍然支持 Jedis,那麼 exclude 掉 io.lettuce:lettuce-core,而後添加 redis.clients:jedis 就是了。
OAuth 2.0 支持
Spring Security OAuth 項目中的功能將會遷移到 Spring Security 中。將會 OAuth 2.0。
Mockito 1.x
Mockito 1.x 再也不支持 @MockBean 和 @SpyBean。 若是你不使用 spring-boot-starter-test 來管理依賴關係,則應升級到 Mockito 2.x。
JSON-B 支持
除了 Jackson 和 Gson,如今還支持了 JSON-B 。JSON 測試支持也已更新爲新的 JsonbTester 類。
Session Endpoint
Spring Session 用如今能夠經過 /application/sessions Actuator Endpoint 進行查找和刪除 session。
ConfigurationProperties 驗證
若是你但願 @ConfigurationProperties 對象上開啓驗證,那麼只須要添加 @Validated 就能夠了。
Spring Mobile
針對 Spring Mobile 的自動配置和依賴再也不支持,已被刪除。
Spring WebFlux 支持錯誤約定
Spring Boot 如今讓 WebFlux 的錯誤約定和 MVC 保持一致就像使用 MVC 同樣:默認視圖和 JSON 響應錯誤,自定義錯誤視圖等等。
TLS 配置 和 HTTP/2 支持
你如今能夠爲你的 WebFlux 應用配置 SSL,使用 server.ssl.* 配置屬性。Tomcat, Jetty, Undertow 和 Reactor Netty 都支持。
你如今也能夠爲你的 MVC 或 WebFlux 應用配置 HTTP/2:
使用 server.http2.enabled。
@KafkaListener支持使用@SendTo
使用了自動配置工廠的 Kafka listener 如今支持 @SendTo。
Kotlin 擴展
Spring Boot 2.0 發佈了 Kotlin runApplication 擴展:
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 如今執行批處理 job 的啓動 order 是 0。
支持自動配置的模板化歡迎頁
Spring Boot 2.0 如今支持靜態和模板化兩種歡迎頁類型。它會首先去配置好的靜態內容的目錄下查找 index.html 文件,若是沒找到,而後就去查找 index 模板。 只要找到了一個就會被用做歡迎頁。
Context path 會在啓動時被打印
在 Spring Boot 以前的版本中,對 context path 貌似並無那麼的重視同樣。如今當咱們使用內嵌容器的時候, context path 會被打印在 HTTP 端口的旁邊,像這樣:
Tomcat started on port(s): 8080 (http) with context path ‘/foo’
測試優化,自動掃描 Converter 和 GenericConverter
Converter 和 GenericConverter beans 如今能夠被 @WebMvcTest 和 @WebFluxTest 自動掃描到了。
Health vs. Status
status endpoint 已經被刪除了,如今改爲了 health。這個 health 端點既能夠展現 status 也能夠有更多的細節。 health 端點如今默認是被暴露的(只展現 status)。若是你但願展現更多的細節信息,能夠經過修改屬性 management.endpoints.health.show-details 來實現:
management.endpoints.health.show-details=true