以Java 8 為基準
Spring Boot 2.0 要求Java 版本必須8以上, Java 6 和 7 不再支援。
内嵌容器包結構調整
為了支援reactive使用場景,内嵌的容器包結構被重構了的幅度有點大。EmbeddedServletContainer被重命名為WebServer,并且org.springframework.boot.context.embedded 包被重定向到了org.springframework.boot.web.embedded包下。舉個例子,如果你要使用TomcatEmbeddedServletContainerFactory回調接口來自定義内嵌Tomcat容器,你現在應該使用TomcatServletWebServerFactory。
Servlet-specific 的server properties調整
大量的Servlet專屬的server.* properties被移到了server.servlet下:
Old property | New property |
| |
| |
| |
| |
| |
| |
由此可以看出一些端倪,那就是server不再是隻有servlet了,還有其他的要加入。
Actuator 預設映射
Actuator的端點(endpoint)現在預設映射到/application,比如,/info 端點現在就是在/application/info。但你可以使用management.context-path來覆寫此預設值。
@ConditionalOnBean
@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.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.0WebFlux 和 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 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)
為了和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擴充:
package com.example.demo
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*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