天天看點

Spring Boot 2.0詳述Spring Boot 2.0詳述

版權聲明:本文為部落客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。