Spring Boot:從炒作到成熟的基礎技術?

banq發表於2018-12-14

依賴注入是Spring的基本元件之一,也可以使用其他框架或自己完成。那麼為什麼要使用Spring?開發人員的生產力就是答案。

Spring Framework的核心任務一直是提供依賴注入(DI)。Spring Boot還有助於管理依賴項,配置事務等等 - 但它只是達到目的一種手段而已。因此,開發人員專案不一定需要Spring也可以輕鬆開發純依賴注入。或者,可以使用許多小框架中的一個。例如,可用於快速開發服務和部署HTTP端點的純Web框架就是理想的選擇,一個代表是關於“無容器”的Micronaut,它不使用servlet容器,而是基於Netty的IO非阻塞。

支援Spring和Spring Boot的論點之一就是開發人員的工作效率。只要沒有嚴重的理由反對,應該始終使用Spring Boot設定實現基於Spring的新應用程式。結果是應用程式框架始終看起來相同,並且可以進行類似配置。標準任務(例如配置資料庫連線,無論是關聯式資料庫還是圖形資料庫)都可以同樣好地執行。這也適用於應用程式與其他服務的整合:宣告啟動程式的依賴項,並且可以在沒有Spring Boot自動配置機制生成程式碼的情況下進行配置。

外部配置是另一項重要的生產力功能:如果預設值不合適,通常可以在外部進行調整。這些是屬性或YAML格式的檔案,環境變數,命令列引數和類似機制。除了諸如事務和快取的跨平臺處理,測試框架,框架內部事件系統和諸如Spring Data和整合之類的令人興奮的專案之類的方面之外,這些機制是使用Spring的充分理由。

Spring Boot和微服務
關於微服務的炒作,長期以來被視為所有IT問題的靈丹妙藥,正在逐漸減弱並屈服於更細微的觀點。Spring Boot與術語微服務密切相關。這來自哪裡?
Spring Boot的基礎知識出現在微服務的最初繁榮階段。Spring Boot經常與Spring Cloud一起使用。除此之外,Spring Cloud還包括部分開源Netflix堆疊,以及許多其他模組,這些模組極大地簡化了建立分散式,基於雲的方法的過程。
但是,Spring Boot也可以很好地構建經典的單片單體巨石應用程式或批處理過程,並且它不是一個微服務框架,因為它經常被誤傳。因此,沒有銀彈可以提前避免可能的問題,並在每種情況下都提供完美的架構

SpringBoot整合
Spring Boot提供了各種專案(資料庫,事件儲存等)的整合。整合通常是節省資源的,並且可以透過所提到的啟動器機制來提供。只有依賴項的宣告才會啟用自動配置,以便在此之前它不會對應用程式的資源消耗做出貢獻。
Spring Boot專案可能非常小,但也非常大 - 取決於它所需的整合。這種靈活性在作者對專案中使用Spring Boot的估計中有所體現。典型的標準專案不存在,因為大多數域具有特殊的特徵。但是,通常沒有時間為需要互動的每個服務編寫自己的整合。

核心開發
核心開發涵蓋了促進Spring和Spring Boot實際工作的所有主題,還包括非功能性主題,例如對快取的支援。
Spring DevTools加速了開發。它們允許在修改類檔案後部分重新載入Spring上下文。之後,Spring Boot通常會快速啟動,但重新載入僅更改的部件會更快。
配置處理器有助於將您自己的應用程式的配置外包給專用類:它生成可在所有主要IDE中讀取的後設資料。它們有助於編寫application.properties或記錄自己應用程式的可能配置。
快取,方面和驗證部分在Spring Framework本身中實現。但是,就像安全性和會話支援一樣,它們只是Spring Boot自動配置的跨應用程式方面。

資料庫
Liquibase和Flyway自動支援Spring Boot而無需進一步配置 - 它們與曾經配置的資料來源一起工作。如果Spring Boot用於開發關聯式資料庫微服務,那麼問題就出現了:誰對資料庫模式擁有主權?同樣,Spring Boot在許多情況下提供了有用的工具。但是,該工具的有用應用由開發人員負責。
支援各種非關聯式資料庫:Redis,Cassandra,Couchbase等,Spring Boot也支援像Neo4j這樣的圖形資料庫和像Mongo或Elasticsearch這樣的文件儲存。通常,每個資料庫都有單獨的Spring Data模組。與JDBC / JPA環境一樣,Spring Boot提供了配置URL和憑據的一致機制。

Web框架
Spring Web MVC和Spring WebFlux都是Spring Framework的一部分,兩者是並行的。兩者都是Spring Boot自動配置的面向請求的Web框架。對於面向元件的框架Vaadin,可以使用啟動器。喜歡採用面向資源的方法的開發人員可以直接使用Spring Boot中的Jersey 2,而無需進一步配置走彎路。

在伺服器上生成HTML內容並不流行。但模板引擎Thymeleaf,Freemarker,Mustache和Groovy模板可以直接與Spring Boot一起使用。

應用程式的實際附加值只有在進入生產操作時才會變得明顯。諸如Actuator之類的SpringBoot啟動模組對此有所幫助。它提供狀態和健康端點的Web介面,並透過JMX提供有關應用程式的資訊。Micrometer是一個收集系統,應用程式和系統指標的新專案。它可以透過Actuator進入應用程式並自動配置。或者,Micrometer可以獨立於Spring Boot使用。

Spring Boot 2
Spring Boot 2中的一個主要特點是反應式程式設計模型。它們解決了有效使用資源的問題,尤其是執行緒。反應式程式設計不僅關係到HTTP請求的處理相關的,而且在資料庫有關。
AkkaVert.xLagom這樣的框架處於最前沿,但Spring提供了許多公司建立的基礎技術的優勢。因此,它擁有龐大的使用者群和全面的知識。隨著新資料型別(如Mono和Flux)以及支援基礎架構的順利引入,Spring 5和Spring Boot 2已成功維護並將這些知識提升到一個新的水平。
Spring Boot 2釋出半年後,Redis,MongoDB,Cassandra和Couchbase的響應式驅動程式已準備就緒。Reactive Cloud Streams提供與Kafka或RabbitMQ的響應式連線。

Spring Boot 2.1
2018年9月下旬在華盛頓的SpringOne平臺並行釋出Spring Framework 5.1。與此同時,Spring Boot 2.1也可用。Spring Framework的特別亮點一方面是JDK 11的支援
透過Spring Fu,開發了一個孵化器專案,其中可以開發和測試新的功能性跳躍功能,特別是在Kotlin方向。其中一些函式程式設計已經流入Spring Framework。
也突出了JUnit 5的全面支援。與年初相比,Maven和Gradle的構建管理工具的顯著改進支援,幾乎沒有理由在新的Spring專案中放棄JUnit 5。
Spring Boot 2.1完全基於現代容器構建,需要Tomcat 9和Undertow 2。同樣,完全支援JDK 11,因此開發人員不再需要依賴Java 8。在安全性方面,spring boot 2.1還實現了核心OAuth 2資源伺服器支援。
旨在提高生產力的高階功能和新功能列表很長。例如,允許將不同的Java記錄器組合在一起並配置。

相關文章