Spring Boot 2.0詳述

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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章