Spring Boot 2.4.0 發布說明


Spring Boot 2.4.0 正式版本不再添加 RELEASE 后綴聲明,在這個版本中增加了大量的新特性和改進,切記,不要輕易升級

除了剛發布的Spring Boot 2.4.0,Spring Boot 2.3.x/2.2.x仍舊是活躍的維護的版本。Spring Boot遵循的是Pivotal OSS支持策略,從發布日期起支持主要版本3年(注意:是主要版本)。下面是詳情:

  • 2.3.x:支持的版本。2020.05發布,是現在的活躍的主干
  • 2.2.x:支持的版本。2019.10發布,是現在的活躍的主干
  • 2.1.x:2018.10發布,支持到2020.10月底,建議盡快升級
  • 2.0.x:2018.3發布,2019.4.3停止維護
  • 1.5.x:生命已終止的版本。2017.1發布,是最后一個1.x分支,2019.8.1停止維護

2.4.0主要新特性

版本命名的更改

從2.4.0開始,版本名將去除RELEASE后綴,所以這次的版本不是2.4.0.RELEASE,而是2.4.0

2.4.0是第一個使用新版本方案的Spring Boot發行版本

全新的配置文件處理(properties/yaml)

這個改變最為重磅,本次改變了配置文件的加載邏輯,旨在簡化和合理化外部配置的加載方式,它可能具有不向下兼容性。

Spring Boot 2.4改變了處理application.properties和application.yml文件的方式:

  • 若你只是簡單的文件application.properties/yaml,那么升級對你是無縫的,你感受不到任何變化
  • 若你使用了比較復雜的文件,如application-profile.properties/yaml這種(或者使用了Spirng Cloud的配置中心、(帶有分隔符----的)多yaml文件),那么默認是不向下兼容的,需要你顯式的做出些更改

因為配置文件隸屬於程序的一部分,特別是我們現在幾乎都會使用到配置中心。因此下面針對於老版本升級到Spring Boot 2.4.0做個簡單的遷移指導。

Spring Boot 2.4對application.poperties/yaml的處理做了更新/升級。旨在簡化和合理化外部配置的加載方式。它還提供了新功能:spring.config.import支持。所以呢,對於Spring Boot 2.4.0之前的版本(老版本)若升級到2.4.0需要做些修改,指導建議如下:

增加此配置后,Spring Boot對配置文件的解析恢復到原來模式:仍舊使用ConfigFileApplicationListener去解析

此API在2.4.0已被標記為過期,按照Spring Boot的版本策略,此類將在Spring Boot 2.6.0版本被移除。因此:若不是迫不得已(時間緊急),並不建議你用兼容手法這么去做,因為這將成為技術債,遲早要還的。

方式一:恢復舊模式(不推薦)

如果你還未准備好做配置遷移的修改,Spring Boot也幫你考慮到了,提供了一鍵切換到舊模式的“按鈕”。具體做法是:只需要在Environment里增加一個屬性spring.config.use-legacy-processing = true就搞定。最簡的方式就是把這個屬性放在application.poperties/yaml里即可。

方式二:按新規則遷移(推薦)

若你對配置文件的使用有如下情行,那么你需要做遷移:

  • 多文檔的yaml文件(帶有----分隔符的文件)
  • 在Jar外使用配置文件,或者使用形如application-{xxx}.properties/yaml這種配置
  • 若在多文檔yaml中使用到了spring.profiles配置項
  • ...

Spring Boot 2.4.0升級對配置文件的改動是最大的,並且還不具備向下兼容性,簡單的說就是從此版本開始要把Spring Boot的配置文件加載機制重學一遍(比如還增加了spring.config.import,增加了對kubernetes配置的支持等等),並且還要學會如何遷移。

新的 spring.config.import 屬性可用於導入 Kubernetes 中常用的配置樹

添加了一個新的啟動端點,用來顯示應用啟動有關的詳細信息,比如可以幫助我們來診斷啟動時間比預期更長的 Spring Beans

Docker 支持升級

完美支持Java 15

核心依賴升級

  • Spring AMQP 2.3

  • Spring Batch 4.3

  • Spring Data 2020.0

  • Spring Framework 5.3

  • Spring Integration 5.4

  • Spring HATEOAS 1.2

  • Spring Kafka 2.6

  • Spring Retry 1.3

  • Spring Security 5.4

  • Spring Session 2020.0

嵌入式數據庫檢測

改進嵌入式數據庫檢測機制:僅當數據庫在內存中時才將其視為嵌入式數據庫。所以如果使用H2、HSQL等產品,但是你是基於文件的持久性或使用的是服務器模式,那么將不會檢測為內存數據庫。而對於非內存數據庫,你可能需要額外做如下動作:

  • sa用戶名將不會再被主動設置。所以如果你的數據庫需要用戶名,請增加配置項:spring.datasource.username = sa
  • 這種數據庫將不會再被自動初始化,若要使用請根據需要更改spring.datasource.initialization-mode的值

Logback配置屬性的更改

Logback一些配置項改名了,新增了配置類LogbackLoggingSystemProperties用於對應,它繼承自之前的LoggingSystemProperties

之前的配置項有些被廢棄(此版本還未刪除,后續版本肯定會刪除的),對應關系如下

老(~已廢棄~)
logging.pattern.rolling-file-name logging.logback.rollingpolicy.file-name-pattern
logging.file.clean-history-on-start logging.logback.rollingpolicy.clean-history-on-start
logging.file.max-size logging.logback.rollingpolicy.max-file-size
logging.file.total-size-cap logging.logback.rollingpolicy.total-size-cap
logging.file.max-history logging.logback.rollingpolicy.max-history

一些屬性是被放到system environment里面的:

老(~已廢棄~)
ROLLING_FILE_NAME_PATTERN LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN
LOG_FILE_CLEAN_HISTORY_ON_START LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START
LOG_FILE_MAX_SIZE LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE
LOG_FILE_TOTAL_SIZE_CAP LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP
LOG_FILE_MAX_HISTORY LOGBACK_ROLLINGPOLICY_MAX_HISTORY

不再注冊DefaultServlet

從Spring Boot 2.4開始,默認將不會再注冊DefaultServlet。因為在絕大多數的應用中,Spring MVC提供的DispatcherServlet是唯一需要被注冊的Servlet。

若你的工程強依賴於此Servelt,那么可以通過此配置項server.servlet.register-default-servlet = true把它注冊上去。

HTTP traces不再包含cookie頭

默認情況下,不在 HTTP traces中包含 Cookie 請求頭和 set-Cookie 響應頭。

若你仍舊想保留老的習慣,那么請用配置項management.trace.http.include = cookies, errors, request-headers, response-headers自行控制。

從spring-boot-starter-test中刪除Vintage Engine

Spring Boot 2.2.0版本開始就引入JUnit 5作為單元測試默認庫,在此之前,spring-boot-starter-test包含的是JUnit 4的依賴,Spring Boot 2.2.0版本之后替換成了Junit Jupiter(Junit5)。

Vintage Engine屬於Junit5的一個模塊,它的作用是:允許用JUnit 5運行用JUnit 4編寫的測試,從而提供了向下兼容的能力。

從2.2.0到現在經過了2個版本的迭代,到Spring Boot 2.4.0這個版本決定了把Vintage Engine從spring-boot-starter-test正式移除。因此:若你的工程仍需要對JUnit4支持,那么請手動引入依賴項(如果工程量不大,強烈建議使用JUnit5,比4好用太多)

<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
說明:其實在2.4.0之前,若你是從https://start.spring.io生成的項目其實也是不會帶有vintage-engine的。只不過它是通過顯式的在pom里通過exclusion標簽來排除的

資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM