Spring Boot 2.2中有什麼新功能? - oio
Spring Boot 2.2最近已釋出,並具有一系列新功能。在相當數量的Spring專案的依賴項升級中,Spring Boot 2.2中的其他更改如下:
- 支援Java 13
- JUnit 5
- Jakarta EE依賴項
- 延遲初始化
- RSocket支援
- Hibernate 方言
- Kubernetes檢測
- 以及其他類似項:執行狀況指示器組,AssertJ 3.12,Spring HATEOAS 1.0,DataSize遷移,Elasticsearch,執行器HTTP跟蹤和稽核,Gradle要求,Jetty日誌記錄配置,Hamcrest 2.1,Freemarker模板配置,預設情況下禁用HttpHiddenMethodFilter,執行狀況指示器,測試應用程式引數,Banner...
Deprecations棄用
首先,我想提醒您注意Spring Boot 2.1中引入的棄用,這些棄用已在新版本(2.2)中完全刪除。因此,如果要從舊版本遷移,則必須擺脫專案中使用的所有不推薦使用的方法。
您可以透過訪問Spring docs網頁搜尋類,方法,介面和其他不贊成使用的內容的列表來找到更多資訊。(例如:https : //docs.spring.io/spring-boot/docs/current/api/deprecated-list.html)
Java 13支援
Spring Boot有趣的部分是它不僅支援Java 8和11,而且還與最近(截至2019年9月17日)釋出的新Java 13版本相容。
JUnit 5
功能豐富的單元測試庫JUnit 5已作為預設支援新增到Spring Boot 2.2 Starter Application。這意味著JUnit 5是預設的測試庫依賴項。
為了執行測試,應使用以下包裝程式:
- Maven包裝器: ./mvnw clean test
- 搖籃包裝器: ./gradlew clean test
如果訪問Spring Boot入門頁面http://start.spring.io並生成一個專案,則會發現建立的專案包含JUnit 5的所有必需依賴項。
此外,如果您仍在使用JUnit 4並想遷移到新的Spring Boot版本,則不必擔心或將所有內容遷移到JUnit 5,因為JUnit 5的引擎支援現有的JUnit 4測試類。
假設您將Maven與JUnit 4的Maven Surefire外掛一起使用,則需要考慮一些因素,例如listener屬性。例如,您可以參考Spring Boot 2.2的發行說明。
要考慮的另一個關鍵點是建立Spring Boot測試。首先,您可以使用在隨機埠上執行的Web伺服器(@LocalServerPort)或使用具有模擬依賴項(@MockBean)在隨機埠上執行的Web伺服器)建立Spring Boot測試;其次,您可以使用以下注釋的建立一個Mock模擬層:@AutoConfigureMockMvc.
Spring Boot 2.2的其他測試依賴項升級是AssertJ 3.13.2,Hamcrest 2.1和Mockito 3.1.0。
Jakarta EE依賴項
如果您還沒有聽說過Jakarta EE,那就不用擔心。Jakarta EE是Java Enterprise Edition的規範。Jakarta EE是Java專注於雲端計算的關鍵。如果您對此主題感興趣,可以閱讀https://www.eclipse.org新聞通訊中的文章。
回到我們的主題,在Spring Boot 2.2中,一些依賴項已從Java EE移至Jakarta EE依賴項:
- javax group ID -> jakarta group ID
請注意,您現在應該移至Jakarta EE API依賴性,因為最終將消除Java EE API依賴性。
延遲初始化
為了啟用延遲初始化,Spring Boot 2.2中引入了一個新屬性。在較舊的版本中也可以這樣做,但是啟用延遲初始化的過程非常困難,因為您需要編寫BeanFactoryPostProcessor。在Spring Boot 2.2中,您可以透過將其設定spring.main.lazy-initialization為true 來啟用它。
它的優點是減少了啟動時間,因為在應用程式啟動期間載入了更少的類並建立了更少的bean。
如果您想知道為什麼我沒有提到Spring Boot的DevTools,那麼答案就是:Spring Boot已經包含DevTools,可以幫助您提高生產率。DevTools不會在每次進行新更改時都重新啟動JVM和應用程式,而是在同一JVM例項中使用熱重新啟動。即使重新啟動後原始時間減少了80%,使用spring.main.lazy-initialization它時甚至可以減少更多,直接在IDE中減少了64%。
但是為什麼預設情況下不啟用它?
這會產生一些在啟動時就應該指出的問題,因為有些類將不再載入,或者直到必要時才建立bean。產生的錯誤應包括:
- NoClassDefFoundError
- OutOfMemoryError
- 因配置錯誤而導致的故障
為了啟用延遲初始化,必須將以下行新增到配置檔案:
spring.main.lazy-initialization=true
這適用於所有bean。
如果除一個(或多個)以外的所有bean需要此配置,則可以使用:@Lazy(false)。此外,如果需要使用延遲初始化配置一個特定的bean,@Lazy則應使用註釋。
如果使用@Lazy註釋了一個類,則意味著所有使用註釋的方法@Bean 都是惰性的。例如,在下面的示例中,將僅延遲載入地址getAddress()。
@Lazy @Configuration public class HelloWorld { @Bean public Address getAddress() { return new Address(); } public Name getName() { return new Name(); } public Company getCompany() { return new Company(); } } |
如果@Lazy從類中除去,並將其新增到@Bean宣告中,則意味著延遲載入僅影響該特定的bean。
@Configuration public class HelloWorld { @Bean @Lazy(true) public Address getAddress() { return new Address(); } public Name getName() { return new Name(); } } |
Kubernetes檢測
Kubernetes是Google提供的開源容器管理工具。
值得注意的是,透過在類上使用@ConditionalOnCloudPlatform,您可以檢查應用程式是否在Kubernetes上執行。
@ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES) public class DemoApplication { //… } |
其他新功能和效能改進包括以下:
配置屬性現在支援基於建構函式的繫結,對執行狀況指示器進行分組的能力以及Spring Boot的RSocket實現的廣泛的自配置。
RSocket是提供反應式流語義的應用程式協議。
spring-boot-starter-rsocket現在是Spring Boot啟動程式的一部分。
考慮到所有因素,我認為您絕對應該嘗試Spring Boot 2.2以便更舒適地編寫程式碼。
相關文章
- 什麼是Spring Boot?為什麼要學習Spring Boot?Spring Boot
- 什麼是Spring Boot?Spring Boot
- Spring Boot 2.2 中的延遲載入Spring Boot
- 什麼是Spring Boot Starters?Spring Boot
- Spring Boot 為什麼這麼火?Spring Boot
- Spring Boot 2.2中的延遲初始化Spring Boot
- Spring Boot與Spring Cloud是什麼關係?Spring BootCloud
- Spring boot與Spring cloud 是什麼關係?Spring BootCloud
- spring boot與spring mvc的區別是什麼?Spring BootMVC
- 【譯】Flutter 2.2中的新功能Flutter
- Flutter 2.2 全新功能介紹Flutter
- 有了 Spring 為什麼還要弄個 Spring BootSpring Boot
- SpringBoot如何優雅關閉(SpringBoot2.3&Spring Boot2.2)Spring Boot
- Java 框架:Spring Boot 2.6健康檢查帶來新功能Java框架Spring Boot
- 面試官:什麼是 YAML?和 Spring Boot 有什麼關係?面試YAMLSpring Boot
- 為什麼Java大神,都在看Spring Boot和Spring Cloud的書?JavaSpring BootCloud
- Java 20中有哪些新功能? - symflowerJava
- office 2019 新功能是什麼?
- Chainlink在元宇宙中有什麼作用?AI元宇宙
- 錫膏在SMT中有什麼作用?
- 一個吃貨來說明Spring Boot與Spring cloud 是什麼關係Spring BootCloud
- Spring Boot:Spring Boot配置MybatisSpring BootMyBatis
- Spring Boot:Spring Boot配置SwaggerSpring BootSwagger
- Node.js 21中有哪些最新功能?Node.js
- PitStop Pro 2022新功能是什麼
- 為什麼說 Java 程式設計師必須掌握 Spring Boot ?Java程式設計師Spring Boot
- Spring Security 6.3 新功能Spring
- 什麼是海外IP代理伺服器?其中有什麼作用?伺服器
- ARCore 在 Google I/O 2018 中有什麼更新Go
- 什麼是 CQRS?它在微服務中有多重要?微服務
- spring、spring MVC、spring BootMVCSpring Boot
- Spring Boot系列十九 Spring boot整合 swaggerSpring BootSwagger
- Spring Boot 參考指南(Spring Boot文件)Spring Boot
- Spring Boot 2.0(八):Spring Boot 整合 MemcachedSpring Boot
- 為什麼不推薦在Spring Boot中使用@Value載入配置Spring Boot
- 為什麼越來越多的開發者選擇使用Spring Boot?Spring Boot
- Spring Boot —— Spring SecuritySpring Boot
- Spring BootSpring Boot