玩轉 Spring Boot 入門篇

語言: CN / TW / HK

Spring 顛覆了 Java 企業級專案的開發,使得企業級的開發由重變輕、由繁至簡,可謂是為 Java 程式設計師帶來了春天。

Spring Boot 是 Spring 框架對“ 約定優於配置 ”理念的最佳實踐的產物,帶來了自動配置、開箱即用、完善的監控體系等諸多特性,著實讓你逃離繁瑣的 XML 配置,更加專注於業務邏輯開發,可謂是 Java 程式設計師的又一春。

坊間傳聞:由於 Spring Boot 將 Spring 開發的自動化程度提升到了一個新的高度,正式 讓 Spring 風雲再起 ;由於 Spring Boot 的魔法(自動配置、內嵌容器、應用監控等)降低研發的難度, 橫掃 Spring 在你成功路上的絆腳石 。官方宣稱:Spring Boot 開箱即用, 絕對沒有程式碼生成,也不需要 XML 配置

Spring Boot 如此之玄妙?你是否已按捺不住,想要親自操刀,躍躍欲試?一探究竟?

莫急,先大致瞭解一下本次分享的內容大綱,然後再磨刀霍霍向 Spring Boot。

1.  磨刀不誤砍柴工。

為了後續專案實戰的需要,也避免後續因為環境不同而導致的差異化問題,在正式敲開 SpringBoot 大門之前,有必要先統一依賴的研發環境。

  • JDK 版本: java version "1.8.0_251"

  • Maven 版本:Apache Maven 3.3.9

  • Spring Boot 的版本:Spring Boot 2.6.2

  • 開發工具:Intellij IDEA

具體的安裝步驟,網上的文章比比皆是,可跟隨谷哥或度孃的指示,一步一步傻瓜式的安裝操作,相信肯定難不倒你,本文不做贅述。

接下來花一分鐘的時間,快速搭建 Spring Boot 專案。

2.  快速敲開 Spring Boot 的大門

2.1. 建立 SpringBoot 專案

建立 Spring Boot 專案的招式(使用 Spring Initializr 、Spring TooI Suite、InteIIiJ IDEA 等)有很多種,切記不要太在意這些招式, 挑花拳繡腿練一練

花拳: 用 Spring Initializr 構建 Spring Boot 專案。

瀏覽器直接訪問 https://start.spring.io/ 連結,便可開啟 Spring Initializer 的 Web 頁面。

雖然成年人不做選擇題,但是此時 的確 需要做如下兩個選擇:

  • 選擇 Java 的版本:與 JDK 安裝版本保持一致,本文的實驗環境為 JDK 1.8 ,所以選擇 8;

  • 選擇 Web 依賴包:為了更好體驗 Spring Boot,選擇新增 Web 依賴。

然後點選“GENERATE”按鈕便可生成一個 Spring Boot 專案的壓縮包,剋制一下好奇心,待練完繡腿再體驗 Spring Boot 到底有多神奇。

繡腿: 在 InteIIiJ IDEA 裡構建 Spring Boot 專案。

在 Intellij IDEA 介面中,單擊【File】→【New】→【Project】,在彈出的視窗中選擇【Spring Initializr】選項,如下圖所示。

確認 Java Version,本次實驗環境選擇 Java 8,如下圖所示。

選擇【Spring Boot Version】,這裡按預設版本即可(當前預設版本為 2.6.2),勾選【Web】→【Spring Web】選項,然後單擊【Next】按鈕,如下圖所示。

點選 Next。

至此,一個完整的 Spring Boot 專案就建立完成了,但是,如何跑起來呢?

2.2. 執行 Spring Boot 專案

方式一: 直接執行 main 函式,例如在 IDEA 裡執行效果如下。

方式二: 採用 mvnw spring-boot:run 命令執行

進入 Spring Boot 專案的根目錄下,直接執行如下命令

./mvnw spring-boot:run

方式三: 採用 java -jar 命令執行

此時先對專案進行 maven 編譯,打包,然後進入 target 目錄,執行如下命令:

# java -jar xxx.jar
java -jar demo-0.0.1-SNAPSHOT.jar

細心的同學會發現控制檯日誌輸出時,會有 Tomcat 以及 8080 埠的身影,這是為什麼呢?

這就展現了一點 Spring Boot 的獨特魅力,內嵌了 Tomcat 伺服器,執行一個 Java main 函式順帶啟動了一個應用伺服器,簡直太神奇了(本次不深入探究,後面原理篇會細談)。

至此,Spring Boot 專案就跑起來了。

遺憾的是連一行程式碼都還沒有寫,這也是 Spring Boot 的魅力所在,讓 Java 程式設計師更專注於業務邏輯開發。

2.3. 新增業務邏輯

終於可以寫幾行程式碼了,終於可以實現點業務邏輯了。

自定義需求:提供一個 say 方法,可接受使用者輸入的引數 name,預設值為 World,然後輸出 Hello name!

實現步驟如上圖所示很簡單:

  • 提供一個 say 方法,可接受使用者輸入的引數 name,預設值為 World,然後輸出 Hello name!(見上圖中標註2)

  • 添加註解 @RestController(見上圖中標註1,註解後續會單獨講解)

2.4 跑起來,Try it

直接瀏覽器訪問 http://localhost:8080/say ,此時引數 name 不傳入值,直接展示預設值。

訪問時傳入引數值,http://localhost:8080/say?name=Amy此時引數 name 傳入 Amy,頁面展示如下。

至此,SpringBoot  的大門已開啟,萬里長征穩穩踏了一步,接下來再一起看看 Spring Boot 專案的目錄結構。

2.5. Spring Boot 專案的目錄結構

pom.xml:構建說明檔案。
/src/main/java:Java 原始碼檔案。
/src/main/resources:所有的資原始檔,包括靜態資原始檔、配置檔案、頁面檔案等。
/src/main/resources/static:Web 應用程式的靜態內容(js、css、images等)。
/src/main/resources/templates:存放呈現模型資料的模板。
/src/main/resources/application.properties:配置檔案,可以根據需要新增配置屬性。
/src/test/java:單元測試類 java 原始碼。
/target:存放編譯後的 .class 檔案、配置檔案以及專案打包後生成的 jar 檔案等。

至此,卻有很多疑問湧上心頭。

若同一臺伺服器上,部署 N 套 Spring Boot 專案,預設開啟都是 8080,埠豈不是被佔用,何解?

另外 Spring Boot 還帶來了什麼好玩的事情呢?下面一起搗騰搗騰、嘗試玩一玩 Spring Boot 專案。

2.6.   玩玩 Spring Boot 專案

控制檯輸出截圖

上圖是 Spring Boot 專案啟動時的控制檯日誌輸出,接下來主要對圖中標註的部分進行倒騰替換一下。

2.6.1.  8080 埠被佔用了咋辦(控制檯輸出截圖標註 1)?

同一臺伺服器上,部署 N 套 Spring Boot 專案,預設開啟都是 8080,埠被佔用,何解?

解決方案卻很簡單,只需在 /src/main/resources 目錄的 application.properties 配置檔案中自定義 server.port 就可以了,此時把服務啟動的埠修改為 8888,配置如下。

server.port=8888

服務跑起來,服務埠成功修改為 8888,效果如下。

2.6.2.  內嵌的 Tomcat 容器是否可以置換一下(控制檯輸出截圖標註 2)?

Spring Boot 除了可以選擇 Tomcat 容器,還可以選擇其它伺服器,接下來嘗試選擇 Jetty 作為內嵌伺服器。

實現方式很簡單:

  • 開啟 pom.xml 檔案,首先排除掉預設的 Tomcat 容器;

  • 然後新增 Jetty 伺服器依賴,就 Ok 了。

服務跑起來,Spring Boot 選擇的內嵌容器由 Tomcat 成功修改為 Jetty 容器,效果如下。

2.6.3.  能否定義超級個性 banner (控制檯輸出截圖標註 3)?

Spring Boot 支援以 txt、gif、jpg、png 為字尾,以 banner 命名的資原始檔形式來自定義 banner,例如 banner.txt 或者 banner.jpg。

實現方式很簡單,花拳繡腿而已。

  • 首先開啟如下任一網址錄入文字,選擇個性化的樣式,把生成的內容儲存到 banner.txt。

http://patorjk.com/software/taag/
https://www.bootschool.net/ascii
  • 然後把 banner.txt 複製到專案中 src/main/resources 目錄下。

服務跑起來,控制檯的輸出確實個性化了有沒有?

感興趣的可以考慮找個性化圖片,去試試看效果如何。

3、 例行回顧

本文是 Spring Boot 入門級的講解,以 Spring 官方文件入門案例作為切入點,主要分享瞭如下部分:

  • 準備 Spring Boot 專案依賴環境

  • 建立 Spring Boot 專案的兩種方式

  • 執行 Spring Boot 專案的三種方法

  • 嘗試新增業務邏輯程式碼,實現了一個 say Hello 的 API

  • Spring Boot 專案的目錄結構介紹

  • 嘗試修改預設 WEB 埠

  • 嘗試修改 Spring Boot 內嵌容器

  • 嘗試加入個性化的 Banner

如果是 Java 小白 ,相信通過這個入門級的專案,能夠正式邁入 Spring Boot 的大門,相信程式中的很多註解會讓你摸不著頭腦,不過這些都可以先忽略,隨著後續的逐步深入與練習,這些都會形成肌肉記憶,一切都不是問題。

如果是 Java 老兵 ,相信通過這個入門級的專案,能夠輕鬆感受到 Spring Boot 著實去除了繁瑣的 XML 配置,使專案更加簡潔化、智慧化,讓 Java 程式設計師更專注業務邏輯開發,正如 Spring 的 slogan 所言:Spring makes Java simple.  真可謂是 Java 程式設計師的又一春。

揭祕本文封面圖片,一隻奔跑的袋鼠。 希望 在追逐技術的道路上, 我們 像袋鼠一樣: 大膽 往前跳,永遠 後退。

袋鼠是澳洲的象徵物,出現在澳洲國徽中,以及一些澳洲貨幣圖案上。許多澳洲的組織團體,如澳洲航空,也將袋鼠作為其標誌。澳大利亞軍隊的車輛,艦船在海外執行任務時很多時候都會塗上袋鼠標誌。

澳大利亞之所以讓袋鼠作為國徽上動物之一,還有一個原因,就是它永遠只會往前跳,永遠不會後退。 希望人們也有像袋鼠一樣,永不退縮的精神。

玩轉 Spring Boot 入門篇就寫到這裡,希望大家能夠喜歡。 一起聊技術、談業務、噴架構,少走彎路,不踩大坑, 會持續輸出更多精彩分享,歡迎關注,敬請期待!

參考資料:

https://spring.io/

https://start.spring.io/

https://spring.io/projects/spring-boot

https://github.com/spring-projects/spring-boot

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/

https://stackoverflow.com/questions/tagged/spring-boot

《Spring Boot實戰》《深入淺出Spring Boot 2.x》

《一步一步學Spring Boot:微服務專案實戰(第二版)》

《Spring Boot揭祕:快速構建微服務體系》