Spring Boot 是什么?Spring Boot 的目的是提供一組工具,以便快速構建容易配置的 Spring 應用程序。 問題:Spring 很難配置!如果您編寫過基于 Spring 的應用程序,就會知道只是完成 “Hello, World” 就需要大量配置工作。這不是一件壞事:Spring 是一個優(yōu)雅的框架集合,需要小心協(xié)調配置才能正確工作。但這種優(yōu)雅的代價是配置變得很復雜(別跟我提 XML)。 解決方案:Spring Boot開始介紹 Spring Boot。Spring Boot 網站 對它的介紹比我的簡介更為簡潔:
基本上講,這意味著您只需極少的配置,就可以快速獲得一個正常運行的 Spring 應用程序。這些極少的配置采用了注釋的形式,所以沒有 XML。 這一切聽起來很不錯,對吧?但 Spring Boot 到底是怎么工作的? 首先,它很有主見Spring Boot 擁有觀點。換句話說,Spring Boot 擁有合理的默認值,所以您可以使用這些常用值快速構建應用程序。 例如,Tomcat 是一個非常流行的 Web 容器。默認情況下,Spring Boot Web 應用程序使用了一個嵌入式 Tomcat 容器。 其次,它可以自定義如果無法改變其想法,具有主見的框架就不是很好的框架。您可以根據自己的喜好輕松地自定義 Spring Boot 應用程序,無論是在進行初始配置時還是在開發(fā)周期的后期階段。 例如,如果喜歡 Maven,可以輕松地在 POM 文件中更改 <dependency> 來替換 Spring Boot 默認值。教程后面會這么做。 開始使用 Spring BootStarterstarter 是 Spring Boot 的一個重要組成部分,用于限制您需要執(zhí)行的手動配置依賴項數量。要想有效地使用 Spring Boot,您應該了解 starter。 starter 實際上是一組依賴項(比如 Maven POM),這些依賴項是 starter 所表示的應用程序類型所獨有的。 所有 starter 都使用以下命名約定:
Spring Boot starter 參考頁面 還列出了其他許多 starter。您可以訪問該頁面來了解每個 starter 的 POM 和依賴項。 自動配置如果您允許的話,Spring Boot 會使用其 查看配置:使用
Spring Boot über jarSpring Boot 旨在幫助開發(fā)人員創(chuàng)建能直接運行的應用程序。為實現(xiàn)該目的,它將應用程序及其依賴項包裝在一個可執(zhí)行 JAR 中。要運行您的應用程序,可以像這樣啟動 Java:
Spring Boot über JAR 不是一個新概念。因為 Java 沒有提供加載嵌套式 JAR 的標準方式,所以開發(fā)人員多年來一直使用 Apache Maven Shade
插件 等工具來構建 “shaded” JAR。shaded JAR 僅包含來自應用程序的所有依賴 JAR 的
Spring Boot 解決這些問題的方法是定義一種 特殊的 JAR 文件布局,其中的 JAR 本身嵌套在 über JAR 中。Spring 支持工具(例如
編寫 Hello, World!現(xiàn)在您已準備好開始直接使用 Spring Boot 了。本節(jié)中的示例基于一個名為 HelloSpringBoot 的簡單應用程序。您可以和我一起練習這個應用程序開發(fā)示例,但是,如果想立即開始使用應用程序代碼,可以從 Github 下載它。 讓我們行動起來,創(chuàng)建一個新的 Maven 項目! 1 創(chuàng)建 Maven 項目在 Eclipse 中,轉到 File > New Project 并選擇 Maven > Maven Project,如圖 1 所示。 圖 1. 選擇一個 Maven 項目單擊 Next,在隨后的對話框中(未給出)再次單擊 Next。 您會被要求選擇新 Maven 項目的架構類型。選擇 maven-archetype-quickstart,如圖 2 所示。 圖 2. 選擇 Maven quickstart 架構類型單擊 Next。 最后,輸入工件設置,如圖 3 所示。 圖 3. 選擇 Maven 工件設置我為 HelloSpringBoot 應用程序使用了以下設置:
單擊 Finish 創(chuàng)建該項目。 2 創(chuàng)建 POM修改 New Project 向導創(chuàng)建的 POM,使其類似于清單 1。 清單 1. HelloSpringBoot 的 POM 文件
請注意清單 1 中突出顯示的行: 第 10 至 14 行顯示了 第 16 至 19 行顯示了 第 25 至 30 行 告訴 Maven 使用 配置不是太多,對吧?請注意,這里沒有 XML。我們使用 Java 注釋完成剩余配置。 進一步了解 Spring Boot 的觀點在進一步介紹之前,我想再講講 Spring Boot 的觀點。換句話說,我認為有必要解釋一下 Spring Boot 如何使用
示例應用程序 HelloSpringBoot 使用了 Spring Boot 的 Web 應用程序 starter
我們來講講主見!據 Spring Boot 辯解,這些是最流行的 Web 應用程序默認設置 — 至少我一直在使用它們。 但是還記得我說過 Spring Boot 可以自定義嗎?如果您想使用不同的技術組合,可以輕松地覆蓋 Spring Boot 的默認設置。 我們接下來將演示一種簡單的自定義。 丟失 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < build > < plugins > < plugin > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-maven-plugin</ artifactId > < version >1.5.2.RELEASE</ version > < executions > < execution > < goals > < goal >repackage</ goal > </ goals > </ execution > </ executions > </ plugin > </ plugins > </ build > |
檢查依賴項:如果您需要查看使用的 Spring Boot starter 拉入了哪些依賴項,請訪問 Spring Boot starter 參考頁面。
一定要注意,Maven 的許多優(yōu)秀功能都是在 <parent> 元素中實現(xiàn)的,所以如果您有合理的理由不使用它,繼續(xù)操作時務必小心。確保向
spring-boot-maven-plugin
添加了一條 repackage 目標執(zhí)行語句,這里提供了解釋。
該項目已配置和自定義。現(xiàn)在是時候構建可執(zhí)行程序了。
要使用 Maven 構建可執(zhí)行 JAR,有兩種選擇:
我將介紹如何實現(xiàn)這兩種方法。
要在 Eclipse 中運行 Maven 構建,請右鍵單擊 POM 文件并選擇 Run As > Maven Build。在
Goals 文本字段中,輸入 clean
和 package
,然后單擊 Run 按鈕。
您會在控制臺視圖中看到一條消息,表明成功實現(xiàn)了構建:
. . [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.440 s [INFO] Finished at: 2017-04-16T10:17:21-05:00 [INFO] Final Memory: 30M/331M [INFO] ------------------------------------------------------------------------ |
要從命令行運行 Maven 構建,請打開 Mac 終端窗口或 Windows 命令提示,導航到 HelloSpringBoot
項目目錄,然后執(zhí)行以下命令:
mvn clean package |
您會在終端窗口或命令提示中看到一條消息,表明成功實現(xiàn)了構建。
$ cd HelloSpringBoot $ pwd /Users/sperry/home/HelloSpringBoot $ mvn clean package . . [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.440 s [INFO] Finished at: 2017-04-16T10:17:21-05:00 [INFO] Final Memory: 30M/331M [INFO] ------------------------------------------------------------------------ $ |
現(xiàn)在您已準備好運行這個可執(zhí)行 JAR 了。
要運行剛創(chuàng)建的可執(zhí)行 JAR,請打開 Mac 終端窗口或 Windows 命令提示,導航到 HelloSpringBoot
項目文件夾,然后執(zhí)行:
java -jar target/HelloSpringBoot-1.0-SNAPSHOT.jar |
其中 target
是構建的默認輸出目錄。如果為它配置了不同的目錄,請在上面的命令中進行相應的替換。
Spring Boot 的輸出包含一個文本式 “啟動屏幕”(第 2 至 7 行),以及其他輸出,類似于下面的清單。我僅展示了部分行,以便讓您了解在運行該應用程序時應看到的內容:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ java -jar target/HelloSpringBoot-1.0-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.2.RELEASE) 2017-04-15 17:46:12.919 INFO 20096 --- [ main] c.makotojava.learn.hellospringboot.App : Starting App v1.0-SNAPSHOT on Ix.local with PID 20096 (/Users/sperry/home/projects/learn/HelloSpringBoot/target/HelloSpringBoot-1.0-SNAPSHOT.jar started by sperry in /Users/sperry/home/projects/learn/HelloSpringBoot) 2017-04-15 17:46:12.924 DEBUG 20096 --- [ main] c.makotojava.learn.hellospringboot.App : Running with Spring Boot v1.5.2.RELEASE, Spring v4.3.7.RELEASE . . 2017-04-15 17:46:15.221 INFO 20096 --- [ main] c.makotojava.learn.hellospringboot.App : Started App in 17.677 seconds (JVM running for 18.555) |
如果應用程序成功啟動,Spring Boot 輸出的最后一行會包含文字 “Started App”(第 13 行)?,F(xiàn)在您已準備好體驗自己的應用程序了,我們接下來就會來體驗它。
可以打開瀏覽器并訪問以下 URL,以便執(zhí)行 HelloSpringBoot 的單一 REST 方法:
http://localhost:8080/hello |
如果看到文本 “Hello, All your base are belong to us”(視頻游戲 Zero Wing 的主頁),就會知道該應用程序在正常運行!
Spring Boot 的觀點基于 POM 的內容,包括您在初步配置應用程序時指定的 Spring Boot starter。形成有關想要構建的應用程序類型的觀點后,Spring Boot 會提供一組 Maven 依賴項。圖 6 展示了 Spring Boot 在 Eclipse 中設置的一些 Maven 依賴項,它們基于 POM 內容以及為 HelloSpringBoot 應用程序指定的 starter:
請注意,Tomcat 是默認的嵌入式 Web 服務器容器?,F(xiàn)在我們假設您不想使用 Tomcat,而是想使用 Jetty。只需更改 POM 中的
<dependencies>
節(jié)(將清單 3 中第 5 至 15 行粘貼到 清單 1 中的第 19 行之前):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < dependencies > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-web</ artifactId > < exclusions > < exclusion > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-tomcat</ artifactId > </ exclusion > </ exclusions > </ dependency > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-jetty</ artifactId > </ dependency > </ dependencies > |
在下面可以注意到,Maven 的 Tomcat 依賴項消失了(得益于清單 3 中的第 5 至 10 行),取而代之的是 Jetty 依賴項(第 12 至 15 行)。
實際上,一張屏幕截圖無法顯示所有 Jetty 依賴項,但它們都包含在這里,而且 Tomcat 依賴項消失了。您可以自行嘗試并查看結果!
簡單的示例雖然也能很好地展示 Spring Boot,但它能做的事情要多得多!在本節(jié)中,我將通過一個 Spring MVC RESTful Web 應用程序,介紹如何讓 Spring Boot 充分發(fā)揮作用。要做的第一件事是設置新示例應用程序 SpringBootDemo。
SpringBootDemo 是一個 Spring Boot 包裝器,它包裝了一個名為 oDoT 的基于 Spring 的簡單 POJO 應用程序。(ToDo 中的反向排列……明白了嗎?)它的目的是練習開發(fā)比簡單 Hello, World 更復雜的應用程序的過程。您還會了解如何使用 Spring Boot 包裝一個現(xiàn)有的應用程序。
要設置和運行 SpringBootDemo,需要做 3 件事:
我創(chuàng)建了一個視頻來幫助引導您完成此過程的每一步?,F(xiàn)在可以啟動該視頻了。
SpringBootDemo 演練
首先,您需要從相應的 GitHub 存儲庫克隆兩個項目。第一個項目名為 odotCore,包含應用程序的業(yè)務邏輯,該項目編寫為一個基于 Spring 的 POJO 應用程序。另一個項目名為 SpringBootDemo,是一個圍繞 odotCore 的 Spring Boot 應用程序包裝器。
要克隆 odotCore 存儲庫,請打開一個 Mac 終端窗口或 Windows 命令提示,導航到您想放入該代碼的根目錄,然后執(zhí)行以下命令:
git clone https://github.com/makotogo/odotCore |
要克隆 SpringBootDemo 存儲庫,可執(zhí)行以下命令:
git clone https://github.com/makotogo/SpringBootDemo |
請注意,兩個項目被直接放在應用程序的根目錄下。接下來將代碼導入工作區(qū)中。
轉到 File > Import... 并選擇 Maven > Existing Maven Projects。
在下一個對話框中,使用 Browse 按鈕導航到根目錄。上一步中克隆的兩個項目都應出現(xiàn)在對話框中,如下圖所示:
單擊 Finish 將這些項目導入 Eclipse 工作區(qū)中。接下來將構建可執(zhí)行 JAR。
要構建 SpringBootDemo,還需要構建 odotCore 和 SpringBootDemo 項目。可以從命令行構建這些項目,就像在 HelloSpringBoot 應用程序中所操作的那樣。在本例中,我將指導您使用 Eclipse。
在 Eclipse 中,右鍵單擊 odotCore 項目。選擇 Run As > Maven Build,指定
clean
和 install
目標。install
目標會將
odotCore-1.0-SNAPSHOT.jar
JAR 文件安裝到本地 Maven 存儲庫中。在運行 SpringBootDemo
Maven 構建時,可從這里以依賴項形式拉入它。
odotCore
Maven 構建成功運行后,右鍵單擊 SpringBootDemo 項目,選擇 Run As >
Maven Build,然后指定 clean
和 package
目標。
備注:odotCore 項目包含多個單元測試。盡管我從不建議跳過單元測試,但您可以設置在 Eclipse 中構建 odotCore 項目的運行配置,讓其跳過這些測試(Run Configuration 對話框上有一個對應的復選框)。
成功構建 SpringBootDemo 后,可以從命令行運行 SpringBootDemo über JAR。
從 Mac 終端窗口或 Windows 命令提示中導航到 SpringBootDemo 目錄。假設構建輸出目錄名為
target
(這是默認設置),執(zhí)行以下命令:
java -jar target/SpringBootDemo-1.0-SNAPSHOT.jar |
現(xiàn)在靜候 Spring Boot 運行該應用程序。當看到文本 “App Started” 時,就可以體驗該應用程序了。
作為一次快速冒煙測試,為了確保您的應用程序正常運行,可打開一個瀏覽器窗口并輸入以下 URL:
http://localhost:8080/CategoryRestService/FindAll |
這會訪問 CategoryRestService
的 FindAll
方法,以 JSON 格式返回數據庫中的所有
Category
對象。
也可以通過 SoapUI 體驗該應用程序。我不會演示該如何做,但本教程的視頻中介紹了該過程。
表 1 給出了 SpringBootDemo 的每個服務中的服務和方法。
服務 | 方法 | HTTP 方法 | 示例 URL @ http://localhost:8080 | |
---|---|---|---|---|
類別 | FindAll | GET | /CategoryRestService/FindAll | 查找數據庫中的所有 Category 對象。 |
類別 | FindById | GET | /CategoryRestService/FindbyId/1 | 查找 ID 值為 1 的類別。 |
類別 | FindById | GET | /CategoryRestService/FindbyName/MY_CATEGORY | 查找名稱值為 “MY_CATEGORY” 的類別。 |
類別 | Add | PUT | /CategoryRestService/Add | 將指定的類別(作為請求主體中的 JSON 有效負載)添加到數據庫中。返回:添加的 Category 對象(作為響應主體中的 JSON)。 |
類別 | 更新 | POST | /CategoryRestService/Update | 更新數據庫中的指定類別(作為請求主體中的 JSON 有效負載)。返回:表示更新狀態(tài)的字符串消息。 |
類別 | 刪除 | DELETE | /CategoryRestService/Delete | 刪除數據庫中的指定類別(作為請求主題中的 JSON 有效負載)。返回:表示刪除狀態(tài)的字符串消息。 |
項 | FindAll | GET | /ItemRestService/FindAll | 查找數據庫中的所有 Category 對象。 |
項 | FindById | GET | /ItemRestService/FindbyId/1 | 查找 ID 值為 1 的類別。 |
項 | FindById | GET | /ItemRestService/FindbyName/TODO_ITEM_1 | 查找名稱值為 “TODO_ITEM_1” 的項。 |
項 | Add | PUT | /ItemRestService/Add | 將指定項(作為請求主體中的 JSON 有效負載)添加到數據庫中。返回:添加的 Item 對象(作為響應主體中的 JSON)。 |
項 | Update | POST | /ItemRestService/Update | 更新數據庫中的指定項(作為請求主體中的 JSON 有效負載)。返回:表示更新狀態(tài)的字符串消息。 |
項 | Delete | DELETE | /ItemRestService/Delete | 刪除數據庫中的指定項(作為請求主體中的 JSON 有效負載)。返回:表示刪除狀態(tài)的字符串消息。 |
建議研究該代碼,試用它,以便更深入地了解 Spring Boot 的工作原理。
本教程介紹了 Spring Boot 解決的問題,并簡要介紹了它的工作原理。然后我演練了設置和運行一個簡單的 Spring Boot 應用程序 HelloSpringBoot 的過程。最后展示了如何使用 Spring Boot 構建和體驗 Spring MVC RESTful Web 服務應用程序。
|
來自: 阿青哥Joe > 《Java生態(tài)系統(tǒng)》