玩轉 Spring Boot 入門篇
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揭祕:快速構建微服務體系》
- 玩轉 Spring Boot 應用篇(序列號生成器服務實現)
- 玩轉 Spring Boot 原理篇(內嵌Tomcat實現原理&優雅停機原始碼剖析)
- 玩轉 Spring Boot 原理篇(自動裝配前湊之自定義Stater)
- 玩轉 Spring Boot 原理篇(核心註解知多少)
- 玩轉 Spring Boot 原理篇(原始碼環境搭建)
- 玩轉 Spring Boot 整合篇(定時任務框架Quartz)
- 玩轉 Spring Boot 入門篇
- 程式設計師進階系列:實戰自己動手編譯 JDK
- 程式設計師進階系列:OOM 都搞不定,還敢妄稱自己Java高階攻城獅?
- Java程式跑的快,全要靠執行緒帶
- Java 8 的這些特性,你知道嗎?
- (六)改掉這些壞習慣,還怕寫不出精簡的程式碼?
- (一)改掉這些壞習慣,還怕寫不出健壯的程式碼?
- 真實|技術人員該如何站好最後一班崗?
- 細數Java專案中用過的配置檔案(YAML篇)
- Java 程式該怎麼優化?實戰篇
- 別人家的 InfluxDB 實戰 原始碼剖析
- 資料庫核心:索引,你知道多少?
- 總是埋頭敲程式碼,豈會有好的產品靈感?!
- Java 反編譯