版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/79349439
Spring Boot 2.0詳述
- 2018.2.22
- 版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。
Spring Boot 2.0即将釋出,目前已經釋出了v2.0.0 RC2版,據傳說下周可能就會正式釋出。Spring Boot 2.0有一系列重大的改變,下面将一一詳述。
一、Spring Boot 2的基線變化
Java 8基線
Spring Boot 2.0需要Java 8以上版本為基礎,它不再支援過時的Java 6和Java 7,這可以推動業内開發人員在開發基于Spring Framework的應用時能夠充分利用Java 8/9提供的新特性。
支援Java 9
Spring Boot 2.0完全支援Java 9,并且提供了一個專門的網頁來彙集Spring Boot with Java 9的相關知識和技巧,具體見:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9。
Spring Framework 5.0
Spring Boot 2.0建立在Spring Framework 5.0之上。盡管Spring架構v5.0自2017年9月釋出,但到目前為止,大多數基于Spring架構的項目都沒有使用它。估計在Spring Boot 2.0GA版釋出後,能快速推動Spring架構v5.0的使用吧。Spring架構v5.0引入了一些很好的改進,其中最值得注意的新特性之一就是它廣泛支援建構響應式應用程式。
二、内嵌的Servlet容器
Spring Boot 2.0可以讓應用程式内嵌Servlet容器,目前主要提供了三種Servlet容器,包括:Jetty、Tomcat、Undertow。其中,Jetty容器是9.4以上版本;Tomcat容器是8.5以上版本。
TLS配置
可以使用server.ssl.*配置屬性為WebFlux應用程式配置SSL,并且這種配置方式對Tomcat、Jetty、Undertow和Reactor Netty等應用伺服器均有效。
支援HTTP/2
Spring Boot 2.0應用程式還可以通過server.http2.enabled設定讓MVC或WebFlux應用程式能夠使用HTTP/2通信協定,并且這種配置方式對Tomcat、Jetty、Undertow應用伺服器均有效。具體則依賴于選擇的Web伺服器和應用程式環境,因為HTTP/2協定不受JDK 8開箱即用的支援。
三、建構Build
Maven
Maven項目預設使用-parameters編譯器标志進行編譯。
Gradle
Spring Boot 2.0需要Gradle 4.x以上版本。Spring Boot的Gradle插件重寫了大量内容,實作了許多重大改進。具體可以閱讀:
https://docs.spring.io/spring-boot/docs/2.0.0.BUILD-SNAPSHOT/gradle-plugin/reference配置Gradle bootRun
BootRun任務提供了用于配置應用程式參數(args)和JVM參數(jvmArgs)的屬性,以及通過execSpec提供了更進階的配置。詳細情況可以閱讀:
https://docs.spring.io/spring-boot/docs/2.0.0.M5/gradle-plugin/reference/html/#running-your-application。根據使用者的回報,這個BootRun任務再次成為Gradle JavaExec任務的一個子類,它可以像任何其他JavaExec任務一樣進行配置。
四、JDBC/ORM的變化
預設連接配接池
Spring Boot 2.0預設使用的連接配接池已從Tomcat的連接配接池更改為HikariCP。如果在提供的環境中使用Hikari,tomcat-jdbc包是provided,可以通過spring.datasource.type重寫來移除它。同樣,如果想要保留Tomcat連接配接池,隻需将以下内容添加到應用的配置中即可:
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
資料庫遷移
Liquibase和Flyway配置鍵被轉移到了spring命名空間(即spring.liquibase和spring.flyway)。
Flyway/Liquibase的靈活配置
如果隻提供了自定義url或user,auto-configuration會重用标準資料源屬性而不是忽略它們。這使得可以針對遷移資料庫的目的建立自定義的資料源DataSource。
資料源DataSource初始化的檢測
如果你正在使用Flyway或Liquibase管理你的資料源的模式Schema,以及使用的是嵌入式資料庫,Spring Boot 2.0将自動關閉Hibernate的自動DDL功能。
資料庫初始化器
隻有在使用嵌入式資料庫時,應用程式的元件中出現了Spring Batch,Spring Integration,Spring Session或Quartz時,資料庫初始化才會預設發生。其原先的enabled屬性已被具有更多内容的枚舉類型所取代。例如,如果想執行Spring Batch初始化,可以設定:
spring.batch.initialize-schema=always
資料源初始化
資料源DataSource的初始化僅針對嵌入式資料源啟用的情況,并在應用程式使用生産資料庫時立即關閉。此外,新的配置項spring.datasource.initialization-mode(替換原spring.datasource.initialize)提供了更多的控制。
資料源測量
Instrumentation負責監控所有可用的資料源并釋出每個名額的度量标準(最小值,最大值和使用率)。
可配置的JPA映射資源
如果将Spring Boot的JPA配置擴充到注冊映射資源,則有一個spring.jpa.mapping-resources屬性。
JdbcTemplate
Spring Boot 2.0的auto-configuration可以通過spring.jdbc.template命名空間自定義JdbcTemplate。此外,NamedParameterJdbcTemplate自動配置的内容會重用JdbcTemplate。
jOOQ
Spring Boot 2.0可以根據資料源DataSource自動檢測jOOQ方言(與JPA方言所做的相似)。此外,@JooqTest注釋還引入了一個簡化測試,但隻供jOOQ使用。
Hibernate
Spring Boot 2.0支援的Hibernate的最低版本是5.2版。可以閱讀Hibernate 5.2遷移指南以了解如何更新:
https://github.com/hibernate/hibernate-orm/wiki/Migration-Guide—5.2支援自定義Hibernate命名政策
對于進階場景,可以在上下文中定義ImplicitNamingStrategy或PhysicalNamingStrategy用作正常bean。
Hibernate屬性自定義
可以通過暴露HibernatePropertiesCustomizer bean來提供更細粒度的方式自定義Hibernate的屬性。
五、NoSQL
Cassandra
通過spring.data.cassandra暴露池選項。
支援響應式Couchbase
通過Spring Data響應式庫可用于Couchbase,官方提供了一個spring-boot-starter-data-couchbase-reactive輕松上手指南。
InfluxDB
如果設定了InfluxDB的Java用戶端和spring.influx.url,那麼InfluxDB用戶端會自動配置,也支援憑證。health終端可以監控InfluxDB伺服器。
Redis緩存配置
可以暴露一個RedisCacheConfiguration來控制RedisCacheManager,同時引入了一個新的注釋@DataRedisTest。
Elasticsearch
Spring Boot 2.0需要Elasticsearch 5.4以上版本。與Elastic宣布的嵌入式Elasticsearch不再受支援保持一緻,原型的自動配置NodeClient已被删除。TransportClient 可以通過使用spring.data.elasticsearch.cluster-nodes提供要連接配接的一個或多個節點的位址來實作自動配置。
Mongo用戶端自定義
通過定義一個MongoClientSettingsBuilderCustomizer類型的bean,Spring Boot的auto-configures可以将進階自定義應用于MongoDB用戶端。
六、測試
Mockito 1.x
Spring Boot 2.0不再支援Mockito 1.x版的@MockBean和@SpyBean注釋。如果不使用spring-boot-starter-test管理你的依賴,就應該更新到Mockito 2.x版。
TestRestTemplate的Kotlin擴充
Spring Boot 2.0提供了Kotlin的RestTemplate擴充,使開發者的體驗保持一緻。
測試改進
可以通過@WebMvcTest和@WebFluxTest注釋自動掃描Converter Bean和GenericConverter Bean。