《Spring Boot 實戰開發》 附錄 II : Spring Boot 2.0 新特性

《Spring Boot 實戰開發》 附錄 II : Spring Boot 2.0 新特性

本節我們介紹 Spring Boot 2.0 版本的眾多新特性,內容包括了 M1~M7里程碑版本的核心新功能特性。不過,我們首先把對 Kotlin 的特性的支持放在最前面講,因為這是一個讓人興奮、迫不及待想要第一時間了解的特性。

Kotlin 特性支持

由于Kotlin是Spring Boot的第一語言,所以得到了很大的支持。Spring Boot 2.0為Kotlin提供了專門的擴展,這讓我們可以更好地使用Spring Boot 框架,同時也充分發揮出 Kotlin編程語言特性中的價值。
Kotlin 是一種來自 JetBrains 的面向對象的語言,它支持函數式編程。它的主要優勢之一是與 Java 有非常高的互操作性。通過引入對 Kotlin 的專門支持,Spring 5.0 中全面吸納了這一優勢。它的函數式編程風格與 Spring WebFlux 模塊完美匹配,它的新路由 DSL 利用了函數式 Web 框架以及干凈且符合語言習慣的代碼??梢韵袂鍐沃羞@樣極簡地表達端點路由:

代碼清單 Kotlin 的用于定義端點的路由 DSL

@Bean
fun apiRouter() = router {
    (accept(APPLICATION_JSON) and "/api").nest {
        "/book".nest {
            GET("/", bookHandler::findAll)
            GET("/{id}", bookHandler::findOne)
        }
        "/video".nest {
            GET("/", videoHandler::findAll)
            GET("/{genre}", videoHandler::findByGenre)
        }
    }
}

Spring Boot 2.0版本已經有 M1~M7共7個里程碑版本,目前是RC1版本。每個里程碑迭代里面都有一些新功能的加入以及舊方法的修改與刪減。下面我們就來分別介紹各個里程碑的新功能特性。
Spring Boot 2.0.0 M1 Release Notes
從1.5 版本升級
此版本中已刪除在 Spring Boot 1.5 中棄用的類、方法和屬性。如果升級,需要確保在升級之前不調用已否決的方法。

基于Java 8

Spring Boot 2.0 需要 Java 8 或更高版本。不再支持 Java 6 和7。

嵌入式容器封裝結構

為了支持reactive編程, 嵌入式容器(embedded containers) 包結構被大量重構。關于EmbeddedServletContainer重構的變化如下表所示:

1.5 版本中的類/包 對應到2.0 M1版本中的類/包
EmbeddedServletContainer WebServer
org.springframework.boot.context.embedded org.springframework.boot.web.embedded
TomcatEmbeddedServletContainerFactory TomcatServletWebServerFactory

Servlet 服務器屬性配置

許多 server.* 的servlet 的屬性已移動到server.servlet.* 命名空間下,如下表所示:

舊屬性 新屬性
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.path server.servlet.path

Actuator默認映射路徑

Actuator endpoints 現在默認映射路徑是 /application 。例如, /info 端點現在對應 /application/info 這個 URL 路徑。 使用 management.context-path 上下文路徑屬性可以重寫此默認值。

@ConditionalOnBean
@ConditionalOnBean 現在使用 AND 邏輯作為條件判斷,而不是之前的OR 邏輯了。

遠程CRaSH Shell
不再支持遠程CRaSH Shell,刪除遠程SSH執行器(actuator)支持。

Spring Loaded
移除Spring Loaded支持。改用 Devtools。

專用 Hazelcast 自動配置
不支持自動配置一個通用(general) HazelcastInstance的同時還自動配置一個專用(dedicated) HazelcastInstance 進行緩存。因此, spring.cache.hazelcast.config 屬性不再可用。

默認連接池
默認連接池已從 Tomcat 切換到 HikariCP(現在性能最好的JDBC連接池組件, HikariCP在github上的地址:https://github.com/brettwooldridge/HikariCP)。如果使用 spring.datasource.type 強制在 Tomcat-based 應用程序中使用Hikari, 現在可以刪掉了。

Servlet Filters
Servlet Filter默認的調度程序類型(dispatcher type)現在采用 DipatcherType.REQUEST。使得Spring Boot的默認值與 Servlet 規范的默認值保持一致。

Spring Security
Spring Security的 Filter 現在自動配置使用 ASYNC, ERROR, 和REQUEST調度程序類型. 使得Spring Boot的默認配置與Spring Security’的默認配置保持一致.

Spring Session
Spring Session的 Filter 現在自動配置使用 ASYNC, ERROR, 和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 的 Java 客戶端的最低支持版本現在是3.2。為了支持此升級, 用戶名和密碼屬性已被刪除, 因為 API 密鑰現在是唯一支持的身份驗證方法。

啟動器Starter可傳遞依賴項(transitive dependencies)
以前的一些Spring Boot starters是自動傳遞依賴于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 屬性。而狀態屬性現在是定義的, 對應于標準狀態屬性的整數值。

默認代理策略
我們知道,在Spring AOP中,有個選項如下:
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
注意:proxy-target-class屬性值決定是基于接口的還是基于類的代理被創建。
如果proxy-target-class 屬性值被設置為true,那么基于類的代理將起作用(這時需要cglib庫)。
而現在在默認情況下, Spring Boot使用 CGLIB 代理, 包括用于 AOP 支持。如果您需要使用標準的JDK 基于接口的代理, 則需要設置 spring.aop.proxy-target-class為 false。

CLI-based testing
測試支持已從 Spring 啟動的 CLI 中刪除, 轉而使用 Maven 或 Gradle 來構建應用程序, 并利用其豐富的測試支持。

@ConfigurationProperties
ignoreNestedProperties 屬性已被刪除。

Multipart配置
為了更好地反映它們的 Servlet 特性, spring.http.multipart.* 配置屬性已重命名為 spring.servlet.multipart.*。

Mustache templates模板默認文件擴展名
Mustache模板的默認文件擴展名是. html, 現在是.mustache,與官方規范和大多數 IDE 插件保持一致。您可以通過更改 spring.mustache.suffix 配置鍵來重寫此新默認值。

WebFlux 和 WebFlux. fn 支持
Spring Boot 2.0 提供了一個新的啟動器starter, 用于支持Reactive Spring Web框架編程。spring-boot-starter-webflux 里面包含了WebFlux框架, 同時還有默認的Web Engine: Reactor Netty (spring-boot-starter-reactor-netty).

Reactive data support
Spring Boot 2.0為以下數據存儲提供自動配置:

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

同時,注解@DataMongoTest也支持reactive repositories。

@WebFluxTest 支持
可以使用 @WebFluxTest 提供與 Spring MVC @WebMvcTest 類似的支持來測試Reactive 控制器。另外,該注解還自動配置了WebTestClient。

使用 @SpringBootTest 自動配置WebTestClient
當使用 @SpringBootTest測試Web服務,WebTestClient 的使用方式與 TestRestTemplate 相同。

Gradle 插件
Spring Boot 的 Gradle 插件已經被大部分重寫, 以使許多重大的改進。關于這些改進點,您可以在參考:https://github.com/spring-projects/spring-boot/issues?utf8=%E2%9C%93&q=label%3A%22theme%3A%20gradle-plugin%22%20milestone%3A2.0.0.M1%20
和 api 文檔:https://docs.spring.io/spring-boot/docs/2.0.0.BUILD-SNAPSHOT/gradle-plugin/reference/html/
了解有關插件功能的更多信息。

構建可執行的 jar 和war
bootRepackage 任務已被替換為 bootJar 和 bootWar ,分別構建可執行的 jar 和war。這兩項任務都擴展了它們的等價標準 Gradle jar 或 war 任務, 使您能夠訪問所有常見的配置選項和行為。

依賴關系管理
Spring Boot的 Gradle 插件不再自動應用依賴項管理插件。取而代之的是, Spring Boot’s plugin現在通過導入正確版本spring-boot-dependencies bom來響應依賴項管理插件的應用。這使您可以更好地管理控制和配置依賴關系。對于大多數 Spring Boot應用程序來說,只需要使用依賴項管理插件(dependency management plugin)這已經是完全夠用的了,配置如下:
apply plugin: 'io.spring.dependency-management'
請注意, 依賴項管理插件dependency-management plugin仍然是 spring-boot-gradle-plugin 插件的一個傳遞依賴, 因此無需將其作為類路徑classpath 依賴項列在您的 buildscript 配置中。

Spring Boot 2.0.0 M2 Release Notes
默認連接池 connection pool
默認連接池已從 Tomcat 更改為Hikari。如果在提供 tomcat-jdbc 的環境中使用Hikari, 現在可以刪除 spring.datasource.type 的重寫。同樣, 如果您想繼續使用 Tomcat 連接池, 只需將以下內容添加到您的配置中:
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
/loggers endpoint POST請求返回的狀態碼
對 /loggers endpoint 的 POST 請求的返回的狀態碼從 200 (OK) 改為 204(No Content)。
Elasticsearch
Elasticsearch 升級到版本 5.4。根據Elastic的公告, 嵌入式 Elasticsearch 不再支持, 自動配置的 NodeClient 已被刪除。TransportClient 的自動配置可以通過使用屬性配置
spring.data.elasticsearch.cluster-nodes
來提供一個或多個要連接的節點的地址。
關于Spring Boot 集成Elasticsearch的開發我們將在后面的章節中詳細介紹。
Quartz Scheduler
Spring Boot 2 提供了spring-boot-starter-quartz 集成Quartz scheduler框架。定時任務的 配置支持內存配置和存儲在 JDBC 數據庫中的配置。關于 Spring Boot 集成Quartz scheduler開發定時任務的內容我們將在后面的章節中詳細介紹。
Spring Data Web 配置
Spring Boot提供了一個新的 spring.data.web 配置命名空間, 配置分頁和排序(paging and sorting)更加簡潔方便。
Json starter
提供了一個新的 spring-boot-starter-json 啟動器,它不僅提供了 jackson-databind ,同時提供了非常實用的模塊:基于Java的8: jackson-datatype-jdk8, jackson-datatype-jsr310 和jackson-module-parameter-names模塊。
Thymeleaf starter
Thymeleaf 啟動器中現在包含了開箱即用的 thymeleaf-extras-java8time 。
InfluxDB
如果InfluxDB java客戶端和spring.influx.url被設置, Spring Boot將會自動配置一個InfluxDB客戶端, 同時也支持憑證(credentials)。
JdbcTemplate
現在可以通過spring.jdbc.template命名空間進行定制Spring Boot自動配置的JdbcTemplate。 此外,自動配置的NamedParameterJdbcTemplate在幕后重用了JdbcTemplate。
jOOQ
Spring Boot根據DataSource自動檢測jOOQ方言(類似于JPA方言)。
此外,還引入了@JooqTest來簡化jOOQ的測試。
@DataRedisTest
提供一個支持Redis分片的注解(slice annotation)。
Mongo client 定制
通過自定義 MongoClientSettingsBuilderCustomizer這個bean, 來定制Mongo client。
Cassandra
配置項spring.data.cassandra 支持pooling options.
Kafka listener types
現在可以通過配置spring.kafka.listener.type來創建一個批處理偵聽器(batch listener) 來同時使用一個ConsumerRecord列表:
spring.kafka.listener.type=batch
Web filters 初始化
在所有支持過濾器(filters)的容器上,Web過濾器現在支持優先初始化。

Auto-configuration report
不滿足條件的類(Unconditional)現在包含在自動配置執行器端點(Actuator endpoint)的響應中。
Reset logger 操作
Loggers endpoint端點允許將logger level級別重置為默認值。

Spring Boot 2.0.0 M3 Release Notes
Maven plugin properties
Spring Boot 的 Maven插件現在支持以spring-boot.* 前綴開始的屬性配置,這個前綴是為了保持一致性并避免與其他插件命名空間發生沖突。例如,使用命令行啟用dev配置文件:
mvn spring-boot:run -Dspring-boot.run.profiles=dev
Devtools Remote Debug Tunnel
已經從Devtools中刪除了通過HTTP通道進行遠程調試(tunnelling remote debugging)的支持。
Jetty
與Tomcat和Undertow保持一致,Jetty現在支持對所有 HTTP請求的響應,而不僅僅是GET請求。
Reactive server customisation
在配置Reactive Web Server時要調用Jetty,Tomcat和Undertow的定制類(Customizers)。
Kafka
消費者和生產者特定的屬性現在可以通過環境進行配置。關于 Spring Boot 集成 Kafka 開發的內容我們將會在后面章節中詳細介紹。
WebTestClient codecs
現在,自動配置的WebTestClient的定制方式與WebClient相同。關于WebTestClient的使用我們將在后面的 Spring Boot 應用的測試章節中詳細介紹。
Spring Session
Spring Session Repository 的過濾器Filter的順序(order) 和 指派類型(dispatcher type)可以分別通過使用 application.properties環境配置中的
spring.session.servlet.filter-order

spring.session.servlet.filter-dispatcher-types
屬性進行配置。

Spring Boot 2.0.0 M4 Release Notes
Actuator
Spring Boot 2.0為Actuator執行器帶來了重要變化:現在支持Spring MVC,Spring WebFlux和Jersey。
Build
執行器Actuator的代碼分為兩個模塊:現有的spring-boot-actuator和新的spring-boot-actuator-autoconfigure。 如果您使用之前的模塊spring-boot-actuator導入執行器,現在請考慮使用spring-boot-starter-actuator啟動器。
面向用戶的更改
面向用戶的重要更改包括:
?Spring Boot的metrics度量標準已經被Micrometer 和dimensional metrics的自動配置所取代。 (關于Micrometer的內容可參考:http://micrometer.io/docs
?端點路徑不再可配置(i.e. endpoints.<id>.path)
?簡化超媒體(Hypermedia)的支持
?現在使用基于正則表達式(Regex-based)的查詢參數匹配,不再用路徑變量
? /env, / flyway, / liquibase, / health數據結構的變化。
Spring Boot 2.0中的 Actuators 的一覽表如下圖所示:

關于 Spring Boot Actuator 的相關內容我們將在后面的章節中詳細介紹。
關于如何遷移老版本的endpoints到 Spring Boot 2.0版本, 可參考官方文檔:https://github.com/spring-projects/spring-boot/wiki/Migrating-a-custom-Actuator-endpoint-to-Spring-Boot-2。

Security
另一個重要的變化是, Actuator不再單獨支持的security安全自動配置: management.security.enabled已不復存在。同時 endpoints.default.web.enabled 在默認情況下都是禁用的, 防止暴露敏感信息。每個端點的敏感標志也在安全配置中變得更加明確。啟用web端點動器可以設置endpoints.default.web.enabled = true。
Configuration
下面的這些配置元素更新了:
? endpoints.cors 遷移到 management.endpoints.cors
? endpoints.jmx 遷移到 management.endpoints.jmx
? endpoints.health.mapping 遷移到 management.health.status.http-mapping
Security
Security 自動配置已經完全不同與舊版本中,詳情參考: https://spring.io/blog/2017/09/15/security-changes-in-spring-boot-2-0-m4

Jolokia
Jolokia 不再放入 endpoint 中,而是遷移到了 management.jolokia.* 配置中。如果想要啟用Jolokia, 配置 management.jolokia.enabled=true 即可。
Jolokia是一個利用JSON通過Http實現JMX遠程管理的開源項目。具有快速、簡單等特點。除了支持基本的JMX操作之外,它還提供一些獨特的特性來增強JMX遠程管理如:批量請求,細粒度安全策略等。Jolokia的項目主頁是:https://jolokia.org/
Build
Spring Boot 現在基于Gradle 4.x 構建。
Database Migration
Liquibase 和Flyway 配置keys 已經遷移到 spring.* 命名空間,分別是: spring.liquibase 和spring.flyway 。如果使用Flyway或Liquibase管理數據源,并且使用嵌入式數據庫,Spring Boot現在將自動關閉Hibernate的自動DDL功能。

關于 Spring Boot 集成使用Liquibase 和Flyway的相關內容,我們將在后面的章節中詳細介紹。

Liquibase是一個用于跟蹤、管理和應用數據庫變化的開源的數據庫重構工具。它將所有數據庫的變化(包括結構和數據)都保存在XML文件中,便于版本控制。Liquibase項目主頁:https://github.com/liquibase/liquibase

Flyway 是獨立于數據庫的應用,用來管理并跟蹤數據庫變更的數據庫版本(官網的宣傳語是:Version control for your database, Robust schema evolution across all environments, With ease, pleasure and plain SQL.),功能上像是git、svn這種代碼版本控制。支持數據庫有 Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix等。Flyway 項目主頁: http://flywaydb.org/

Auto-configuration ordering
@AutoConfigureOrder的默認值從 Ordered.LOWEST_PRECEDENCE 改成 0.
Database initializer
Spring Batch、Spring Integration、Spring Session和Quartz的數據庫初始化只有在使用和嵌入數據庫時才會發生。例如,如果您希望始終執行Spring Batch initialization,您可以設置: spring.batch.initialize-schema=always.
自動配置的測試工具 test utilities
一個新的ApplicationContextRunner測試工具使得測試您的自動配置變得非常容易。新的測試套件都遷移到了這個新模型上。
Java 9 支持
該版本已經開始致力于Java 9的支持,還沒有得到完全的支持。
Spring Boot 2.0.0 M5 Release Notes
Surefire默認值
自定義 include/exclude 模式與最新的Surefire默認值一致。
Redis
現在的spring-boot-starter-redis 中,Redis的driver由 Lettuce 取代了 Jedis 。仍然支持Jedis,使用方法是排除 io.lettuce:lettuce-core 依賴,同時添加 redis.clients:jedis依賴.
OAuth 2.0 支持
Spring Security OAuth 項目正在遷移到 Spring Security中。目前已經支持OAuth 2.0 Client。如果您只需要OAuth 2.0客戶端支持,您可以使用Spring Boot 2.0提供的自動配置。同時還將繼續支持springboot 1.5。
Mockito 1.x
Mockito 1.x 不再支持 @MockBean 和 @SpyBean注解。如果您沒有使用 spring-boot-starter-test 管理您的依賴,您需要手動升級到Mockito 2.x.

配置Gradle bootRun
BootRun任務現在提供了配置應用程序參數(args)和JVM參數(jvmArgs)的屬性。更高級的配置可以通過execSpec獲得。有關更多細節,請參閱Gradle插件的文檔:https://docs.spring.io/spring-boot/docs/2.0.0.M5/gradle-plugin/reference/html/#running-your-application
更新項目結構和CI
Spring Boot現在使用concourse.ci用于持續集成和發布。項目POM文件也進行了重組,使其更簡單。這些更改對大多數用戶應該是透明的。
Java 9 支持
除了少數確定的案例外,master 在本地基于Java 9構建通過。如果您想使用Java 9運行Spring Boot應用程序,可以參考:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9
Micrometer 1.0.0-rc.2 支持
Micrometer提供的度量支持將繼續發展。這個版本建立Micrometer 1.0.0-rc2上。
Spring Framework 5.0 GA
Spring Boot的這個里程碑是第一個包含Spring Framework 5.0的GA發布的里程碑。往后核心Spring框架API 將保持穩定。
JSON-B 支持
除了Jackson和Gson之外,我們現在還支持JSON綁定的JSON-B。
JSON測試也通過新的JsonbTester類進行了新支持。
Session Endpoint
Spring Session用戶現在可以/application/sessions Actuator Endpoint進行查找和刪除會話Session。

Spring Boot 2.0.0 M6 Release Notes

Actuator 配置變化
管理服務器(Management Server)相關的屬性從 management.* 變更為 management.server.* 。
另外 management.server.context-path配置跟 server.context-path 意義等同(僅當設置了 management.server.port的時候才有效). 另外,您還可以用一個新的、獨立的屬性來設置管理端點的基本路徑: management.endpoints.web.base-path.
例如, 您設置了
management.server.context-path=/management
management.endpoints.web.base-path=/application
您將通過路徑 /management/application/health 來訪問到應用的健康信息端點。
spring.config.location
spring.config.location: 它以前將一個location添加到默認值列表中,現在它會替換掉默認location。如果您依賴于以前處理的方式,現在應該使用spring.config .additional- location。

隱式open-in-view的消息
從現在開始,不顯式啟用spring.jpa.open-in-view的應用程序,您將在啟動期間收到警告消息。此消息確保您知曉在視圖渲染(view rendering)期間可執行的數據庫查詢(database queries)。
Gradle 構建中的 mainClassName 配置
現在BootRun, BootJar和BootWar都將使用 mainClassName 來配置應用程序的入口主類。 與 Gradle 自己的application plugin 保持一致。
ConfigurationProperties validation
現在可使用@Validated注解來校驗您的 @ConfigurationProperties 標注的對象。
DataSource 初始化
數據源(DataSource )初始化現在只對嵌入式數據源啟用,并且在生產環境中關閉。新的
spring.datasource.initialization-mode
取代了舊的
spring.datasource.initialize
并提供了更多的配置項。
Spring Mobile
Spring Mobile中的自動配置和依賴管理被移除。
在Spring WebFlux中支持的錯誤約定

彈簧引導現在支持同樣的錯誤與WebFlux約定與MVC一樣:默認視圖和JSON響應錯誤,自定義的錯誤觀點,和更多…看看專用部分的參考文檔。
Spring WebFlux中的錯誤約定Error conventions 支持
Spring Boot 現在支持WebFlux和 MVC使用統一的一套錯誤約定: 默認視圖和JSON響應錯誤,自定義的錯誤視圖等。更多關于Spring WebFlux的錯誤處理(Error Handling)可參考文檔:https://docs.spring.io/spring-boot/docs/2.0.0.M6/reference/html/boot-features-developing-web-applications.html#boot-features-webflux-error-handling
TLS 配置和HTTP/2 支持
現在可以通過屬性server.ssl.* 來配置WebFlux 應用的 SSL功能。同時支持所有可用的 Web Servers: Tomcat, Jetty, Undertow 以及Reactor Netty等.
配置server.http2.enabled屬性,可以在您的MVC 或者 WebFlux應用中來啟用HTTP/2支持,目前支持Tomcat 和Undertow。
配置JPA 資源映射
如果您正在擴展Spring Boot的JPA配置來注冊映射資源(mapping resources),那么現在可以通過spring.jpa.mapping-resources屬性來直接配置。

@KafkaListener 的 @SendTo支持
使用自動配置的Kafka偵聽器(listeners)現在支持@SendTo注解。
數據源的指標(Metrics)
默認情況下,所有可用的數據源都將被檢測(instrumented)。
Kotlin extension
Spring Boot現在有一個Kotlin 擴展函數runApplication,我們可以直接在 main 函數中的直接寫出下面的代碼:

package com.easypringboot.demo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class DemoApplication

fun main(args: Array<String>) {
    runApplication<DemoApplication>(*args)
}

Spring Boot 2.0.0 M7 Release Notes
Actuator configuration變化
根據社區反饋,默認的 management.endpoints.web.base-path配置值從 "/application" 變更為 "/actuator";
配置屬性 endpoints.* 遷移到 management.endpoint.* 命名空間下。
Health vs. Status
狀態status端點被移除,取而代之的是一個獨特的健康端點,可以顯示狀態或全部細節。health端點現在是默認暴露的(只顯示狀態)??梢允褂胢anagement.endpoint.health.show-details 屬性來配置顯示應用程序的健康詳情:

management.endpoint.health.show-details=true

Actuator endpoint exposures
端點曝光被簡化了。每種技術都提供了一個公開和排除屬性,而不是每個端點和每個技術的啟用標志。例如,要公開所有web端點,但是env端點:

簡化了暴露Endpoint的配置。各個端點屬性中同時提供了expose 和exclude 屬性。例如,要暴露出所有web端點,但是不暴露env端點,配置如下:

management.endpoints.web.expose=*
management.endpoints.web.exclude=env

在這個文檔中詳細介紹了 Actuator 的功能更新:https://docs.spring.io/spring-boot/docs/2.0.0.M7/reference/htmlsingle/#production-ready ;
同時這個文檔中有新的 Actuator API 介紹:https://docs.spring.io/spring-boot/docs/2.0.0.M7/actuator-api/html/ 。

Auto-configuration report
由于“自動配置報告”定義了多于自動配置的結果,因此它被重新命名為“條件評估報告”(Conditions evaluation report)。
端點 /actuator/auto-config 中的信息現在可以在端點 /actuator/conditions 中找到。
Jackson serialization
配置項 spring.jackson.serialization.write-dates-as-timestamps 默認值變為false, 意思是所有JSR310 日期類型都會被序列化成ISO-8601 字符串。
基于Kotlin來使用 Jackson
由于沒有預料到的副作用,jackson -module- kotlin已經從spring-boot-starter-json中刪除了。如果您正在Kotlin項目中使用Jackson,那么您現在必須手動添加
com.fasterxml.jackson.module:jackson-module-kotlin
這個依賴。
Spring Data repositories 支持
支持命令式(imperative)和響應式(reactive)的Spring Data repositories ??梢酝ㄟ^配置屬性
spring.data.<store>.type
來實現,默認值是auto。
Commons Digester 依賴管理
這個依賴commons-digester 不再自動配置,你需要自己定義 version 。
Job command line runner order
CommandLineRunner執行優先級設置為0。
Spring Social
刪除了對Spring Social 的自動配置和依賴管理功能。
配置Gradle的 bootRun 任務
基于用戶的反饋,BootRun任務再次成為Gradle的JavaExec 任務的子類。它的配置方式與其他JavaExec任務相同。
條件注解 Bean增量記錄
當使用devtools的應用程序由于更改而重新啟動時,將記錄一個條件評估報告的增量。這個delta定義了哪些條件已經更改,以及對應用程序的影響。例如,如果您將自己的ObjectMapper添加到一個使用自動配置版本的應用程序中,那么以下內容將被記錄:

2017-11-24 14:45:57.723  INFO 63896 --- [  restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation delta:

==========================
CONDITION EVALUATION DELTA
==========================

Positive matches:
-----------------
    None
Negative matches:
-----------------
   JacksonAutoConfiguration.JacksonObjectMapperConfiguration#jacksonObjectMapper:
      Did not match:
         - @ConditionalOnMissingBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) found beans of type 'com.fasterxml.jackson.databind.ObjectMapper' objectMapper (OnBeanCondition)


Exclusions:
-----------

    None


Unconditional classes:
----------------------

    None
Scheduled tasks actuator endpoint

當啟用定時任務功能(i.e. @EnableScheduling),我們現在提供了一個新的端點endpoint
/actuator/scheduledtasks
來展示cron, fixed delay 以及 fixed rate 定時任務的信息。
時間配置屬性
許多配置屬性,比如server.session.cookie.max- age的值為秒(或毫秒,取決于屬性)來配置時間。這些屬性已經轉換為Java持續時間Duration 類型,因此您可以配置

server.session.cookie.max-age=2d

來表示“兩天”。注意,現有的、非后綴的值將按預期繼續工作。
自動配置模板歡迎頁面
Spring Boot支持靜態和模板歡迎頁面。它首先在配置的靜態資源目錄查找index.html文件。如果沒找到靜態index.html文件,它會去視圖模板下面找index 模板。只要找到了一個就會自動被用作應用程序的歡迎頁面。
優化Redis緩存自動配置
默認的緩存Cache 配置可以使用屬性: spring.cache.redis.* 來配置。
支持自定義Hibernate命名策略
對于高級場景中,現在可以在上下文(context)中使用常規bean來自定義ImplicitNamingStrategy或PhysicalNamingStrategy 。
Data Couchbase Reactive 支持
支持使用屬性
spring-boot-starter-data-couchbase-reactive
來配置Spring Data reactive repositories 的 Couchbase支持。
Couchbase 是一個強大的NoSQL 數據平臺。Couchbase Server是由早先的CouchDB(https://github.com/apache/couchdb)發展而來, 繼承了Memcached的技術特性, 是一個開源的、分布式的、面向文檔(document-oriented) 的NoSQL 數據庫。Couchbase 還有一個非常專業的 web 管理界面,并且支持通過 RESTful API 管理。項目空間:https://github.com/couchbase
TestRestTemplate Kotlin 擴展(extensions)
提供一個TestRestTemplate 的Kotlin擴展類TestRestTemplateExtensions.kt,帶來更好的開發體驗。
啟動日志記錄Context path
在使用嵌入式容器時,將在HTTP端口后面記錄上下文路徑。類似的這樣:
Tomcat started on port(s): 8080 (http) with context path '/foo'
Testing 功能增強
當使用注解 @WebMvcTest 和@WebFluxTest時將自動掃描Converter 和GenericConverter beans。

關于 Spring Boot 2.0的詳細的功能特性,可以參考:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes
如果您想從 Spring Boot 1.5版本升級到 Spring Boot 2.0版本,可參考指南:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容