《Spring Boot 實戰(zhàn)開發(fā)》 附錄 II : Spring Boot 2.0 新特性
本節(jié)我們介紹 Spring Boot 2.0 版本的眾多新特性,內容包括了 M1~M7里程碑版本的核心新功能特性搭儒。不過木缝,我們首先把對 Kotlin 的特性的支持放在最前面講臀脏,因為這是一個讓人興奮孽惰、迫不及待想要第一時間了解的特性识樱。
Kotlin 特性支持
由于Kotlin是Spring Boot的第一語言火的,所以得到了很大的支持赠法。Spring Boot 2.0為Kotlin提供了專門的擴展麦轰,這讓我們可以更好地使用Spring Boot 框架,同時也充分發(fā)揮出 Kotlin編程語言特性中的價值砖织。
Kotlin 是一種來自 JetBrains 的面向對象的語言款侵,它支持函數(shù)式編程。它的主要優(yōu)勢之一是與 Java 有非常高的互操作性镶苞。通過引入對 Kotlin 的專門支持喳坠,Spring 5.0 中全面吸納了這一優(yōu)勢。它的函數(shù)式編程風格與 Spring WebFlux 模塊完美匹配茂蚓,它的新路由 DSL 利用了函數(shù)式 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版本已經(jīng)有 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 現(xiàn)在默認映射路徑是 /application 般渡。例如懒豹, /info 端點現(xiàn)在對應 /application/info 這個 URL 路徑。 使用 management.context-path 上下文路徑屬性可以重寫此默認值驯用。
@ConditionalOnBean
@ConditionalOnBean 現(xiàn)在使用 AND 邏輯作為條件判斷脸秽,而不是之前的OR 邏輯了。
遠程CRaSH Shell
不再支持遠程CRaSH Shell蝴乔,刪除遠程SSH執(zhí)行器(actuator)支持记餐。
Spring Loaded
移除Spring Loaded支持。改用 Devtools薇正。
專用 Hazelcast 自動配置
不支持自動配置一個通用(general) HazelcastInstance的同時還自動配置一個專用(dedicated) HazelcastInstance 進行緩存剥扣。因此, spring.cache.hazelcast.config 屬性不再可用巩剖。
默認連接池
默認連接池已從 Tomcat 切換到 HikariCP(現(xiàn)在性能最好的JDBC連接池組件, HikariCP在github上的地址:https://github.com/brettwooldridge/HikariCP)。如果使用 spring.datasource.type 強制在 Tomcat-based 應用程序中使用Hikari, 現(xiàn)在可以刪掉了钠怯。
Servlet Filters
Servlet Filter默認的調度程序類型(dispatcher type)現(xiàn)在采用 DipatcherType.REQUEST佳魔。使得Spring Boot的默認值與 Servlet 規(guī)范的默認值保持一致。
Spring Security
Spring Security的 Filter 現(xiàn)在自動配置使用 ASYNC, ERROR, 和REQUEST調度程序類型. 使得Spring Boot的默認配置與Spring Security’的默認配置保持一致.
Spring Session
Spring Session的 Filter 現(xiàn)在自動配置使用 ASYNC, ERROR, 和REQUEST調度程序類型. 使得Spring Boot的默認配置與Spring Session的默認配置保持一致.另外晦炊,在Spring Session 2.0版本中鞠鲜,移除了Mongo 和GemFire的支持。
Jetty
現(xiàn)在支持的最低版本是Jetty 9.4
Tomcat
現(xiàn)在支持的最低版本是Tomcat 8.5
Hibernate
現(xiàn)在支持的最低版本是Hibernate 5.2
Gradle
現(xiàn)在支持的最低版本是Gradle 3.4
SendGrid
SendGrid 的 Java 客戶端的最低支持版本現(xiàn)在是3.2断国。為了支持此升級, 用戶名和密碼屬性已被刪除, 因為 API 密鑰現(xiàn)在是唯一支持的身份驗證方法贤姆。
啟動器Starter可傳遞依賴項(transitive dependencies)
以前的一些Spring Boot starters是自動傳遞依賴于Spring MVC 框架的spring-boot-starter-web。由于現(xiàn)在加入了對Spring WebFlux的新支持, spring-boot-starter-mustache 和spring-boot-starter-thymeleaf 不再自動傳遞依賴spring-boot-starter-web稳衬。
現(xiàn)在具體依賴spring-boot-starter-web 或者 spring-boot-starter-webflux 霞捡, 由開發(fā)人員自主選擇并添加到依賴中。
Solr 健康指示器
Solr 的健康檢查的詳細信息不再定義 solrStatus 屬性薄疚。而狀態(tài)屬性現(xiàn)在是定義的, 對應于標準狀態(tài)屬性的整數(shù)值碧信。
默認代理策略
我們知道,在Spring AOP中街夭,有個選項如下:
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
注意:proxy-target-class屬性值決定是基于接口的還是基于類的代理被創(chuàng)建砰碴。
如果proxy-target-class 屬性值被設置為true,那么基于類的代理將起作用(這時需要cglib庫)板丽。
而現(xiàn)在在默認情況下, 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, 現(xiàn)在是.mustache砚殿,與官方規(guī)范和大多數(shù) 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為以下數(shù)據(jù)存儲提供自動配置:
? 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 插件已經(jīng)被大部分重寫, 以使許多重大的改進岸晦。關于這些改進點欧啤,您可以在參考: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/
了解有關插件功能的更多信息睛藻。
構建可執(zhí)行的 jar 和war
bootRepackage 任務已被替換為 bootJar 和 bootWar ,分別構建可執(zhí)行的 jar 和war邢隧。這兩項任務都擴展了它們的等價標準 Gradle jar 或 war 任務, 使您能夠訪問所有常見的配置選項和行為店印。
依賴關系管理
Spring Boot的 Gradle 插件不再自動應用依賴項管理插件。取而代之的是, Spring Boot’s plugin現(xiàn)在通過導入正確版本spring-boot-dependencies bom來響應依賴項管理插件的應用倒慧。這使您可以更好地管理控制和配置依賴關系按摘。對于大多數(shù) Spring Boot應用程序來說,只需要使用依賴項管理插件(dependency management plugin)這已經(jīng)是完全夠用的了纫谅,配置如下:
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 的環(huán)境中使用Hikari, 現(xiàn)在可以刪除 spring.datasource.type 的重寫付秕。同樣, 如果您想繼續(xù)使用 Tomcat 連接池, 只需將以下內容添加到您的配置中:
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
/loggers endpoint POST請求返回的狀態(tài)碼
對 /loggers endpoint 的 POST 請求的返回的狀態(tài)碼從 200 (OK) 改為 204(No Content)兰珍。
Elasticsearch
Elasticsearch 升級到版本 5.4。根據(jù)Elastic的公告, 嵌入式 Elasticsearch 不再支持, 自動配置的 NodeClient 已被刪除询吴。TransportClient 的自動配置可以通過使用屬性配置
spring.data.elasticsearch.cluster-nodes
來提供一個或多個要連接的節(jié)點的地址掠河。
關于Spring Boot 集成Elasticsearch的開發(fā)我們將在后面的章節(jié)中詳細介紹。
Quartz Scheduler
Spring Boot 2 提供了spring-boot-starter-quartz 集成Quartz scheduler框架汰寓。定時任務的 配置支持內存配置和存儲在 JDBC 數(shù)據(jù)庫中的配置口柳。關于 Spring Boot 集成Quartz scheduler開發(fā)定時任務的內容我們將在后面的章節(jié)中詳細介紹。
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 啟動器中現(xiàn)在包含了開箱即用的 thymeleaf-extras-java8time 。
InfluxDB
如果InfluxDB java客戶端和spring.influx.url被設置唯笙, Spring Boot將會自動配置一個InfluxDB客戶端, 同時也支持憑證(credentials)肌访。
JdbcTemplate
現(xiàn)在可以通過spring.jdbc.template命名空間進行定制Spring Boot自動配置的JdbcTemplate找默。 此外,自動配置的NamedParameterJdbcTemplate在幕后重用了JdbcTemplate吼驶。
jOOQ
Spring Boot根據(jù)DataSource自動檢測jOOQ方言(類似于JPA方言)惩激。
此外,還引入了@JooqTest來簡化jOOQ的測試蟹演。
@DataRedisTest
提供一個支持Redis分片的注解(slice annotation)风钻。
Mongo client 定制
通過自定義 MongoClientSettingsBuilderCustomizer這個bean, 來定制Mongo client。
Cassandra
配置項spring.data.cassandra 支持pooling options.
Kafka listener types
現(xiàn)在可以通過配置spring.kafka.listener.type來創(chuàng)建一個批處理偵聽器(batch listener) 來同時使用一個ConsumerRecord列表:
spring.kafka.listener.type=batch
Web filters 初始化
在所有支持過濾器(filters)的容器上酒请,Web過濾器現(xiàn)在支持優(yōu)先初始化骡技。
Auto-configuration report
不滿足條件的類(Unconditional)現(xiàn)在包含在自動配置執(zhí)行器端點(Actuator endpoint)的響應中。
Reset logger 操作
Loggers endpoint端點允許將logger level級別重置為默認值。
Spring Boot 2.0.0 M3 Release Notes
Maven plugin properties
Spring Boot 的 Maven插件現(xiàn)在支持以spring-boot.* 前綴開始的屬性配置布朦,這個前綴是為了保持一致性并避免與其他插件命名空間發(fā)生沖突囤萤。例如,使用命令行啟用dev配置文件:
mvn spring-boot:run -Dspring-boot.run.profiles=dev
Devtools Remote Debug Tunnel
已經(jīng)從Devtools中刪除了通過HTTP通道進行遠程調試(tunnelling remote debugging)的支持是趴。
Jetty
與Tomcat和Undertow保持一致涛舍,Jetty現(xiàn)在支持對所有 HTTP請求的響應,而不僅僅是GET請求唆途。
Reactive server customisation
在配置Reactive Web Server時要調用Jetty做盅,Tomcat和Undertow的定制類(Customizers)。
Kafka
消費者和生產(chǎn)者特定的屬性現(xiàn)在可以通過環(huán)境進行配置窘哈。關于 Spring Boot 集成 Kafka 開發(fā)的內容我們將會在后面章節(jié)中詳細介紹吹榴。
WebTestClient codecs
現(xiàn)在,自動配置的WebTestClient的定制方式與WebClient相同滚婉。關于WebTestClient的使用我們將在后面的 Spring Boot 應用的測試章節(jié)中詳細介紹图筹。
Spring Session
Spring Session Repository 的過濾器Filter的順序(order) 和 指派類型(dispatcher type)可以分別通過使用 application.properties環(huán)境配置中的
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執(zhí)行器帶來了重要變化:現(xiàn)在支持Spring MVC让腹,Spring WebFlux和Jersey远剩。
Build
執(zhí)行器Actuator的代碼分為兩個模塊:現(xiàn)有的spring-boot-actuator和新的spring-boot-actuator-autoconfigure。 如果您使用之前的模塊spring-boot-actuator導入執(zhí)行器骇窍,現(xiàn)在請考慮使用spring-boot-starter-actuator啟動器瓜晤。
面向用戶的更改
面向用戶的重要更改包括:
?Spring Boot的metrics度量標準已經(jīng)被Micrometer 和dimensional metrics的自動配置所取代。 (關于Micrometer的內容可參考:http://micrometer.io/docs)
?端點路徑不再可配置(i.e. endpoints.<id>.path)
?簡化超媒體(Hypermedia)的支持
?現(xiàn)在使用基于正則表達式(Regex-based)的查詢參數(shù)匹配腹纳,不再用路徑變量
? /env, / flyway, / liquibase, / health數(shù)據(jù)結構的變化痢掠。
Spring Boot 2.0中的 Actuators 的一覽表如下圖所示:
關于 Spring Boot Actuator 的相關內容我們將在后面的章節(jié)中詳細介紹。
關于如何遷移老版本的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 自動配置已經(jīng)完全不同與舊版本中,詳情參考: 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實現(xiàn)JMX遠程管理的開源項目爷速。具有快速央星、簡單等特點。除了支持基本的JMX操作之外遍希,它還提供一些獨特的特性來增強JMX遠程管理如:批量請求等曼,細粒度安全策略等里烦。Jolokia的項目主頁是:https://jolokia.org/
Build
Spring Boot 現(xiàn)在基于Gradle 4.x 構建凿蒜。
Database Migration
Liquibase 和Flyway 配置keys 已經(jīng)遷移到 spring.* 命名空間禁谦,分別是: spring.liquibase 和spring.flyway 。如果使用Flyway或Liquibase管理數(shù)據(jù)源废封,并且使用嵌入式數(shù)據(jù)庫州泊,Spring Boot現(xiàn)在將自動關閉Hibernate的自動DDL功能。
關于 Spring Boot 集成使用Liquibase 和Flyway的相關內容漂洋,我們將在后面的章節(jié)中詳細介紹遥皂。
Liquibase是一個用于跟蹤、管理和應用數(shù)據(jù)庫變化的開源的數(shù)據(jù)庫重構工具刽漂。它將所有數(shù)據(jù)庫的變化(包括結構和數(shù)據(jù))都保存在XML文件中演训,便于版本控制。Liquibase項目主頁:https://github.com/liquibase/liquibase
Flyway 是獨立于數(shù)據(jù)庫的應用,用來管理并跟蹤數(shù)據(jù)庫變更的數(shù)據(jù)庫版本(官網(wǎng)的宣傳語是:Version control for your database贝咙, Robust schema evolution across all environments样悟, With ease, pleasure and plain SQL.),功能上像是git庭猩、svn這種代碼版本控制窟她。支持數(shù)據(jù)庫有 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的數(shù)據(jù)庫初始化只有在使用和嵌入數(shù)據(jù)庫時才會發(fā)生。例如趴腋,如果您希望始終執(zhí)行Spring Batch initialization吊说,您可以設置: spring.batch.initialize-schema=always.
自動配置的測試工具 test utilities
一個新的ApplicationContextRunner測試工具使得測試您的自動配置變得非常容易。新的測試套件都遷移到了這個新模型上优炬。
Java 9 支持
該版本已經(jīng)開始致力于Java 9的支持疏叨,還沒有得到完全的支持。
Spring Boot 2.0.0 M5 Release Notes
Surefire默認值
自定義 include/exclude 模式與最新的Surefire默認值一致穿剖。
Redis
現(xiàn)在的spring-boot-starter-redis 中蚤蔓,Redis的driver由 Lettuce 取代了 Jedis 。仍然支持Jedis糊余,使用方法是排除 io.lettuce:lettuce-core 依賴秀又,同時添加 redis.clients:jedis依賴.
OAuth 2.0 支持
Spring Security OAuth 項目正在遷移到 Spring Security中。目前已經(jīng)支持OAuth 2.0 Client贬芥。如果您只需要OAuth 2.0客戶端支持吐辙,您可以使用Spring Boot 2.0提供的自動配置。同時還將繼續(xù)支持springboot 1.5蘸劈。
Mockito 1.x
Mockito 1.x 不再支持 @MockBean 和 @SpyBean注解昏苏。如果您沒有使用 spring-boot-starter-test 管理您的依賴,您需要手動升級到Mockito 2.x.
配置Gradle bootRun
BootRun任務現(xiàn)在提供了配置應用程序參數(shù)(args)和JVM參數(shù)(jvmArgs)的屬性。更高級的配置可以通過execSpec獲得贤惯。有關更多細節(jié)洼专,請參閱Gradle插件的文檔:https://docs.spring.io/spring-boot/docs/2.0.0.M5/gradle-plugin/reference/html/#running-your-application
更新項目結構和CI
Spring Boot現(xiàn)在使用concourse.ci用于持續(xù)集成和發(fā)布。項目POM文件也進行了重組孵构,使其更簡單屁商。這些更改對大多數(shù)用戶應該是透明的。
Java 9 支持
除了少數(shù)確定的案例外颈墅,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提供的度量支持將繼續(xù)發(fā)展恤筛。這個版本建立Micrometer 1.0.0-rc2上官还。
Spring Framework 5.0 GA
Spring Boot的這個里程碑是第一個包含Spring Framework 5.0的GA發(fā)布的里程碑。往后核心Spring框架API 將保持穩(wěn)定毒坛。
JSON-B 支持
除了Jackson和Gson之外妻枕,我們現(xiàn)在還支持JSON綁定的JSON-B。
JSON測試也通過新的JsonbTester類進行了新支持粘驰。
Session Endpoint
Spring Session用戶現(xiàn)在可以/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添加到默認值列表中顶伞,現(xiàn)在它會替換掉默認location饵撑。如果您依賴于以前處理的方式,現(xiàn)在應該使用spring.config .additional- location唆貌。
隱式open-in-view的消息
從現(xiàn)在開始滑潘,不顯式啟用spring.jpa.open-in-view的應用程序,您將在啟動期間收到警告消息锨咙。此消息確保您知曉在視圖渲染(view rendering)期間可執(zhí)行的數(shù)據(jù)庫查詢(database queries)语卤。
Gradle 構建中的 mainClassName 配置
現(xiàn)在BootRun, BootJar和BootWar都將使用 mainClassName 來配置應用程序的入口主類。 與 Gradle 自己的application plugin 保持一致酪刀。
ConfigurationProperties validation
現(xiàn)在可使用@Validated注解來校驗您的 @ConfigurationProperties 標注的對象粹舵。
DataSource 初始化
數(shù)據(jù)源(DataSource )初始化現(xiàn)在只對嵌入式數(shù)據(jù)源啟用,并且在生產(chǎn)環(huán)境中關閉骂倘。新的
spring.datasource.initialization-mode
取代了舊的
spring.datasource.initialize
并提供了更多的配置項眼滤。
Spring Mobile
Spring Mobile中的自動配置和依賴管理被移除。
在Spring WebFlux中支持的錯誤約定
彈簧引導現(xiàn)在支持同樣的錯誤與WebFlux約定與MVC一樣:默認視圖和JSON響應錯誤,自定義的錯誤觀點,和更多…看看專用部分的參考文檔历涝。
Spring WebFlux中的錯誤約定Error conventions 支持
Spring Boot 現(xiàn)在支持WebFlux和 MVC使用統(tǒng)一的一套錯誤約定: 默認視圖和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 支持
現(xiàn)在可以通過屬性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),那么現(xiàn)在可以通過spring.jpa.mapping-resources屬性來直接配置蔫仙。
@KafkaListener 的 @SendTo支持
使用自動配置的Kafka偵聽器(listeners)現(xiàn)在支持@SendTo注解。
數(shù)據(jù)源的指標(Metrics)
默認情況下丐箩,所有可用的數(shù)據(jù)源都將被檢測(instrumented)摇邦。
Kotlin extension
Spring Boot現(xiàn)在有一個Kotlin 擴展函數(shù)runApplication,我們可以直接在 main 函數(shù)中的直接寫出下面的代碼:
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變化
根據(jù)社區(qū)反饋屎勘,默認的 management.endpoints.web.base-path配置值從 "/application" 變更為 "/actuator"施籍;
配置屬性 endpoints.* 遷移到 management.endpoint.* 命名空間下。
Health vs. Status
狀態(tài)status端點被移除概漱,取而代之的是一個獨特的健康端點丑慎,可以顯示狀態(tài)或全部細節(jié)。health端點現(xiàn)在是默認暴露的(只顯示狀態(tài))瓤摧「土眩可以使用management.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 中的信息現(xiàn)在可以在端點 /actuator/conditions 中找到罐旗。
Jackson serialization
配置項 spring.jackson.serialization.write-dates-as-timestamps 默認值變?yōu)閒alse, 意思是所有JSR310 日期類型都會被序列化成ISO-8601 字符串。
基于Kotlin來使用 Jackson
由于沒有預料到的副作用唯蝶,jackson -module- kotlin已經(jīng)從spring-boot-starter-json中刪除了九秀。如果您正在Kotlin項目中使用Jackson,那么您現(xiàn)在必須手動添加
com.fasterxml.jackson.module:jackson-module-kotlin
這個依賴粘我。
Spring Data repositories 支持
支持命令式(imperative)和響應式(reactive)的Spring Data repositories 鼓蜒”曰唬可以通過配置屬性
spring.data.<store>.type
來實現(xiàn),默認值是auto都弹。
Commons Digester 依賴管理
這個依賴commons-digester 不再自動配置娇豫,你需要自己定義 version 。
Job command line runner order
CommandLineRunner執(zhí)行優(yōu)先級設置為0畅厢。
Spring Social
刪除了對Spring Social 的自動配置和依賴管理功能冯痢。
配置Gradle的 bootRun 任務
基于用戶的反饋,BootRun任務再次成為Gradle的JavaExec 任務的子類框杜。它的配置方式與其他JavaExec任務相同浦楣。
條件注解 Bean增量記錄
當使用devtools的應用程序由于更改而重新啟動時,將記錄一個條件評估報告的增量咪辱。這個delta定義了哪些條件已經(jīng)更改振劳,以及對應用程序的影響。例如油狂,如果您將自己的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),我們現(xiàn)在提供了一個新的端點endpoint
/actuator/scheduledtasks
來展示cron, fixed delay 以及 fixed rate 定時任務的信息专筷。
時間配置屬性
許多配置屬性,比如server.session.cookie.max- age的值為秒(或毫秒弱贼,取決于屬性)來配置時間。這些屬性已經(jīng)轉換為Java持續(xù)時間Duration 類型磷蛹,因此您可以配置
server.session.cookie.max-age=2d
來表示“兩天”哮洽。注意,現(xiàn)有的弦聂、非后綴的值將按預期繼續(xù)工作鸟辅。
自動配置模板歡迎頁面
Spring Boot支持靜態(tài)和模板歡迎頁面。它首先在配置的靜態(tài)資源目錄查找index.html文件莺葫。如果沒找到靜態(tài)index.html文件匪凉,它會去視圖模板下面找index 模板。只要找到了一個就會自動被用作應用程序的歡迎頁面捺檬。
優(yōu)化Redis緩存自動配置
默認的緩存Cache 配置可以使用屬性: spring.cache.redis.* 來配置再层。
支持自定義Hibernate命名策略
對于高級場景中,現(xiàn)在可以在上下文(context)中使用常規(guī)bean來自定義ImplicitNamingStrategy或PhysicalNamingStrategy 堡纬。
Data Couchbase Reactive 支持
支持使用屬性
spring-boot-starter-data-couchbase-reactive
來配置Spring Data reactive repositories 的 Couchbase支持聂受。
Couchbase 是一個強大的NoSQL 數(shù)據(jù)平臺。Couchbase Server是由早先的CouchDB(https://github.com/apache/couchdb)發(fā)展而來, 繼承了Memcached的技術特性, 是一個開源的烤镐、分布式的蛋济、面向文檔(document-oriented) 的NoSQL 數(shù)據(jù)庫。Couchbase 還有一個非常專業(yè)的 web 管理界面炮叶,并且支持通過 RESTful API 管理碗旅。項目空間:https://github.com/couchbase
TestRestTemplate Kotlin 擴展(extensions)
提供一個TestRestTemplate 的Kotlin擴展類TestRestTemplateExtensions.kt渡处,帶來更好的開發(fā)體驗。
啟動日志記錄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