以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
Old property | New property |
server.context-parameters.* |
server.servlet.context-parameters.* |
server.context-path |
server.servlet.context-path |
server.jsp.class-name |
server.servlet.jsp.class-name |
server.jsp.init-parameters.* |
server.servlet.jsp.init-parameters.* |
server.jsp.registered |
server.servlet.jsp.registered |
server.servlet-path |
server.servlet.path |
由此能夠看出一些端倪,那就是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做爲依賴。
記住:web和webflux是平行的關係。咱們以前的文章中提到過spring webflux。你能夠移步查看:Spring 5 新增全新的reactive web框架: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 5 新增全新的reactive web框架:webflux。
鬆綁定改善
鬆綁定已經獲得改善。這裏簡單的舉個例子:
簡單的屬性在刪除特殊字符而後轉成小寫後進行綁定。好比:
下面的屬性最終都會被映射爲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的支持:
@DataMongoTest
測試註解也是支持reactive的。
@WebFluxTest支持
Reactive controller如今可使用@WebFluxTest
來測試。它提供的功能和 @WebMvcTest
相似。並且WebTestClient能夠直接使用,已經被自動配置(auto-configured)了。
支持使用@SpringBootTest自動配置WebTestClient
當你使用@SpringBootTest
with an actual server (that is, either DEFINED_PORT or RANDOM_PORT), a WebTestClient is available the same way TestRestTemplate is.
使用@SpringBootTest進行WebTestClient自動配置
將@SpringBootTest用於實際服務器(即DEFINED_PORT或RANDOM_PORT)時,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 Boot開發一個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擴展:
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
原文連接:
https://mp.weixin.qq.com/s/EWmuzsgHueHcSB0WH-3AQw