Java 開發人員應該知道的五大 Spring Boot 特性
您可能聽說過 Spring Boot,它的神奇力量是創建一個不到 140 個字符的 Spring Web 應用程序,可以寫在一條推文中,但這究竟意味著什么?是什么特性為 Spring Boot 提供了如此強大的功能并使 Spring 應用程序開發如此簡單?好吧,這就是您將在本文中學習的內容,但是如果您趕時間,讓我告訴您,您將詳細了解 Spring Boot 的自動配置、Starter 依賴項、Spring Boot CLI、Actuator 和 Spring Initializer 功能。這些特性消除了與編寫基于 Spring 的 Java Web 應用程序相關的大部分痛苦和摩擦。
但是,在進入這個細節之前,讓我們重新審視一下與基于 Spring 的 Java 開發相關的問題。我個人喜歡在享受解決方案之前先看到問題并感受它。請記住,只有在努力工作后才會感到舒適,用餐也是如此,當您餓了時,您會更享受。
Spring 無疑是一個很棒的框架,它為你做了很多事情,例如它為你創建了一個對象,它為它們提供了它們的依賴關系,如果 Spring 不存在,它會帶走你編寫的大量代碼,但作為回報它在配置和學習方面也對你提出了很多要求。
如果您曾經在一個新建項目中工作過,并且您從頭開始創建一個全新的基于 Spring 的 Java 應用程序,那么您就會知道這不是小菜一碟。您首先需要找到所需的所有依賴項,然后找到它們的兼容版本。您還需要配置很多 bean 來啟用一些 Spring 魔法。
例如,如果你想創建一個 基于 Spring MVC 的 REST 應用程序,它支持嵌入式 tomcat 中的 JSON 格式,那么你的 Maven pom.xml 文件中至少有 8 到 10 個依賴項,例如 spring-core.jar、spring-mvc.jar、 jackson.jar、embedded-tomcat.jar 等,請注意這是一個非常簡單的設置。
Spring Boot 只是消除了所有這些痛苦,讓您編寫重要的代碼,即應用程序代碼。我提到的所有 Spring Boot 特性,例如自動配置、Starter POM 或 Starter 依賴項以及 Spring Boot CLI 旨在簡化使用 Spring 的 Java 開發。
現在,讓我們更詳細地了解這些功能中的每一個
1、 自動配置
您可能使用過基于 Spring 的 Java Web 應用程序,該應用程序連接到關系數據庫,例如像 H2 這樣的內存數據庫,如果是,那么您可能知道您需要聲明JdbcTemplate為 bean,并且還需要配置一個 DataSource,它是JdbcTempalte 的依賴項。
在使用基于 Java 的現代 Spring 應用程序中configuration,您需要將以下兩個方法添加到您的
Configuration 類中:
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">@豆</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
公共 JdbcTemplate jdbcTempalte(DateSource ds){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
返回新的 JdbcTempalte(ds);</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
}</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
@豆</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
公共數據源數據源(){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
返回新的 EmbeddedDatabaseBuilder()</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
.setType(EmbeddedDatabaseType.H2)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
.addScripts('ddl.sql', 'data.sql')</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
。建造();</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
}</font></font>
對于做過 Spring 開發的人來說,這并不是一個復雜的問題,但是如果您重新開始,那么可能需要數小時和數天才能弄清楚這一點。
但是,更重要的是,這是我們許多人編寫的一段代碼,與我們的應用程序無關。我的意思是,這段代碼不是唯一的,每個使用 JDBC 的 Spring 應用程序都需要它。
這就是 Spring Boot AutoConfiguration 發揮作用的地方。它會檢測類路徑中是否存在某個類,然后自動為您配置它。
例如,如果您已經添加JdbcTempalte到類路徑和 H2.jar 中,那么 Spring Boot 可以自動為您配置一個內存數據庫和一個可以使用的 JdbcTempatle。您無需編寫上述代碼即可JdbcTemplate在 DAO 層中使用。
這只是一個例子。Spring Boot 自動配置做出了 200 多個這樣的決定,并通過檢查 JAR 依賴關系自動配置許多功能。例如,如果 spring-mvc.jar 存在,那么它可以自動配置 DispatcherServlet、 InternalViewResolver等。
如果存在 JPA 和 Hibernate,那么它也可以配置它,如果你有 spring-security.jar,那么它甚至可以配置一個基本的安全性來保護你的應用程序。
順便說一句,在依賴自動配置時,需要深入了解才能正確保護您的應用程序。
默認情況下,自動配置功能處于禁用狀態,您需要通過在配置類上使用@EnableAutoConfiguration或@SpringBootApplication注釋來啟用它。我通常注釋 Main 類,我將使用嵌入式 Tomcat 服務器運行該類。
建議@SpringBootApplication從 Spring Boot 1.2 開始使用注解,因為它結合了其他幾個注解以使您的代碼更具可讀性。
簡而言之,Spring Boot 的自動配置功能節省了大量工作并減少了開發時間,我強烈建議您在使用 Spring Boot 時使用自動配置。
2、 入門 POM
雖然 AutoConfiguration 消除了配置通用功能的痛苦,但 Starter POM 通過在項目中查找和添加通用依賴項來消除痛苦。
為了構建一個簡單的基于 Spring MVC 的支持 Jackson的 REST 應用程序并運行它一個嵌入式容器,您至少需要以下依賴項,例如
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">spring-core.jar</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
spring-web.jar</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
spring-webmvc.jar</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
杰克遜-databind.jar</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
tomcat-embed-core.jar</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
tomcat-embed-el.jar</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
tomcat-embed-logging-juil.jar</font></font>
通過使用 Spring Boot Starter POM 或 starter 依賴功能,您只需在 pom.xml 中添加 spring-boot-starter-web 依賴即可獲得所有這些
因此,無需添加所有這些依賴項并擔心它們的兼容版本,您只需添加一個即可。您還將更有信心使用經過嘗試和測試的庫版本,并且將來不會出現任何不兼容問題。
啟動 POM 功能的另一個微妙好處是您不需要記住或搜索依賴項。如果您正在構建 web 應用程序,您可以添加一個“web”啟動器,如果您正在構建
JPA 應用程序,您可以添加“jpa”啟動器,通過按功能聚合常見的依賴項 Spring Boot 使它們易于記憶和使用。
順便說一句,如果您想知道 Starter POM 功能在內部是如何工作的,那么讓我告訴您所有的魔法都來自 Maven 或 Gradle 的傳遞依賴功能。提取正確版本的庫的是 Maven 或 Gradle,Starter POM 只需聲明它們。如果您想了解更多信息,我建議您查看 Dan Vega 的 Spring Boot 快速應用程序開發課程。
簡而言之,Starter POM 或 starter 依賴是 Spring Boot 的另一個很棒的特性,它確實有助于簡化 Spring 應用程序的開發。它就像自動配置的近親,你會經常一起使用它們。
3、 Spring Boot CLI
在本文的第一段中,我說過現在可以創建一個適合推文的 Java Web 應用程序,這得益于 Groovy 和 Spring Boot CLI。
Spring Boot CLI 是 Spring Boot 框架提供的命令行界面,它允許您使用 Groovy 編程語言創建基于 Spring 的 Web 應用程序。實際上,Groovy 和 Spring Boot 很好地互補,Groovy 旨在使 Java 開發更簡單,而 Spring Boot 旨在使 Spring 應用程序開發更簡單,并且都從彼此的簡單性中受益。
雖然自動配置和啟動器依賴項是 Spring Boot 的一個組成部分,但 Spring CLI 是一個可選功能,您還需要安裝 Spring CLI 才能使用它。
這是 Groovy 和 Spring Boot CLI 中的一個簡單的 HelloWorld RESTful Web 服務,即使不編譯也可以運行,如下所示:
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">@RestController</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
類 HelloSpringBootController{</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
@RequestMapping("/")</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
定義你好(){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
返回“你好 Spring Boot CLI”</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
}</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
}</font></font>
就是這樣,您可以在 Spring Boot CLI 附帶的嵌入式容器上運行它,無需 web.xml,無需配置,也無需服務器設置。
如果您想知道這些整體是如何工作的,即 Groovy 是如何知道 @RestController和@RequestMapping注釋的,那么讓我告訴您 Spring Boot CLI 利用自動配置和啟動 POM 功能讓您只專注于編寫應用程序代碼?
Spring Boot CLI 檢測到@RestController并@RequestMapping正在使用它,它知道需要將哪些啟動器依賴項添加到類路徑中才能使其工作。
一旦下載了這一系列依賴項,自動配置就會自動啟動并配置它以供使用,例如,一旦 spring-boot-web-starter 進入圖片,它就會下載 spring-mvc.jar,然后自動配置會自動配置 DispatcherServlet并啟用春天MVC。
這整個事情看起來像魔術,但它是一個現實。
4、執行器
執行器是 Spring Boot 的另一個很棒的功能,它允許查看正在運行的 Spring Boot 應用程序中發生的事情。憑借其自動配置的所有優點,存在不知道應用程序內部內容的風險,而 Spring Actuator 解決了該風險。
它提供了很多關于生產中正在運行的應用程序的見解和指標。例如,通過使用 Actuator,您可以準確了解在應用程序上下文中配置了哪些 bean,做出了哪些自動配置決策,應用程序可以使用哪些環境變量、系統屬性、命令行參數等等。
您甚至可以跟蹤應用程序處理的 HTTP 請求,以及各種有用的應用程序指標,例如 CPU 和內存使用情況、垃圾收集詳細信息、Web 請求和數據源使用情況。
Spring Boot Actuator 還提供了幾個端點來檢索這些數據,例如,您可以使用 RESTful API 獲取所有這些信息,或者您可以使用其遠程 shell 功能安全地進入應用程序并通過發出命令獲取所有這些信息。
它還使用 JMX MBean 公開了所有這些功能,這意味著您可以在運行時使用 JConsole 之類的 JMX 客戶端來控制它們。
同時,您還需要保護對 Actuator 端點的訪問,因為它不僅會暴露機密信息,而且很危險。例如,任何人都可以使用 /shutdown 端點來停止您的應用程序。
不過,您不必擔心。與任何其他 Spring 應用程序一樣,您可以使用 Spring Security 來保護 Actuator 端點。
5、 Spring Boot 初始化器
Spring Initializer 是 Spring Boot 的另一個特性,它解決了項目結構方面的問題。它是一個 Web 應用程序,允許您使用 Java、Kotline 或 Groovy 和 Spring Boot 生成 Maven 或 Gradle 項目。
您需要指定的只是在 GUI 中提供項目元數據,例如項目名稱、組、工件等。它還允許您從大列表中選擇啟動器依賴項,例如 web、JPA 或安全啟動器。
Spring Initializer 項目可以在 https://start.spring.io/ 訪問。創建項目后,您可以下載 Zip 文件,然后打開 IDE,如 Eclipse 或 IntelliJ IDEA,如 Nelson Djalo 的 Spring Boot Essential 課程中所述。然后,您可以編輯此示例項目以放置您的代碼。
根據我的經驗,許多 Java 和 Spring 開發人員面臨的常見問題之一是啟動項目。他們中的許多人對是否放置您的 Java 文件、資源文件等一無所知。
雖然 Maven、Gradle、 IntelliJ IDEA和 Eclipse可以幫助您提供基本結構,但您仍然需要精通這兩項技能才能搶占先機,如果您不熟悉 Maven 或您的 IDE,那可能是一場噩夢。
Spring Boot Initaizer 解決了這個問題,讓創建基于 Spring 的 Java 應用程序變得容易,而無需真正了解 Spring 框架的大量內部細節。
這就是 Java 開發人員應該知道的 Spring Boot 的一些基本特性。這些特性確實使使用 Java 和 Spring 變得有趣和高效,這就是為什么越來越多的公司采用 Spring Boot 進行 Java 開發。具有 Spring Boot 經驗的 Java 開發人員也很受歡迎,如果您正在尋找作為 Java Web 開發人員的下一份工作,那么 Spring Boot 技能真的可以發揮作用。