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