# 六角鼠年鐵人賽 Week 9 - Spring Boot - Info :::info 作為一個寫 Java 的工程師來說,Spring Framework 一直是必修的項目之一。 原因無它,Spring Framework 在各個項目中的服務與發展實在太過於優異,以至於它幾乎無可取代性。 尤其在2014年 Spring Boot 、2015年 Spring Cloud 逐一問世之後,透過 Spring Boot 快速建構服務,並以 Spring Cloud 塑造 MicroServices 的方式,加上 Spring 整合其他 Framework 的簡易程度,不管是開發、維運,都讓工程師省下許多建置的成本、加速了專案開發速度,並能夠建置出穩定的系統。 現如今,Java 依然沒有出現比 Spring 系列還好用的框架,且它持續在進化著,好 Framework 不學嗎? 接下來的主題就會圍繞在 Spring Boot 方面,Kai這邊會去學習許多好用的套件或功能,然後分享在文章中~ ::: ==大家好,我是 "為了拿到金角獎盃而努力著" 的文毅青年 - Kai== ### 行行重行行 古詩 :::info 行行重行行,與君生別離。 相去萬餘里,各在天一涯。 道路阻且長,會面安可知? 胡馬依北風,越鳥巢南枝。 相去日已遠,衣帶日已緩。 浮雲蔽白日,遊子不顧返。 思君令人老,歲月忽已晚。 棄捐勿複道,努力加餐飯。 ::: ## What is Spring Boot ? Spring Boot 其實就是 Spring,它並不是一個新的框架,而是 Spring 預先替開發者做了許多設定的建置,讓開發者無須花費時間調整專案設定上,可以在建立專案之後直接開始開發業務面的需求,且崁入如 Tomcat、Jetty 等套件,直接讓其經啟用後直接成為一個獨立服務。 你可能會問,哪些是專案設定? 在開啟一個新的 Spring Framework 中,你會需要去處理 web.xml 中的 DispatcherServlet、你會需要去處理 application.properties 檔案、Apache Tomcat 的設定等。 上述這些其實都是非常基本面的處理,跟業務需求無關,但工程師每次都要在新專案中去調整這些設定,否則 Spring Framework 就會無法啟用。 而 Spring Boot 正是 Spring 希望開發者專注於開發業務功能而被打造出的框架 > 說SpringBoot是框架其實不太對,但沒有更好的說法XD ## Spring Boot 優點 - 容易部署 - 高擴展性 - 與 Container 適性佳 - 較少的 Config 配置 - 縮減開發時間 ## Spring Boot 問世的前因 - 減少重複的 Config 設置 - 建構可獨立運行的 Application - 能以更簡單的方式進行 Spring 專案開發 - 降低學習 Spring 的學習曲線 基於上述所說,我們可以知道為什麼 Spring 會再造出一個 Spring Boot 的框架出來,而 Spring Boot 也的確為許多 Java 開發者帶來開發時程上的效益。 不再需要調整 Config 設定。 不再需要將專案打包成 war,並放上 Tomcat 才能執行。 (run jar) ## Spring Boot 缺點 有優點就有缺點,Spring Boot 的也不例外,雖然這些缺點是完全可以被忽視的: - **不熟悉配置的人,不容易懂 Spring Boot 到底幫忙做了什麼** 因為 Spring Boot 幾乎只用 @annotation 的方式處理配置的問題,因此寫入大量的 @annotaion 會讓初學者無法理解其底層運作原理。 - **web.xml 和 application.properties 消失,取而代之的是各套件的 Config class 檔** 這點因人而異,Kai 這邊持保留態度,畢竟有人習慣一覽無遺,有人習慣分門別立,只是對於 Spring 開發者來說,一開始接觸對這改變的不適應絕對比剛入門的還要大。 且也不能說這些是完全消失,開發者仍然可以在 SpringBoot 專案中建立這些設定文檔,SpringBoot 會自動讀取對應的設定,但相比在 Spring 時期,的確是少了非常多的內容,習慣了 Spring, SpringMVC 的開發師會有不適應的時期,但只要一經熟悉絕對可以開啟你的加速領域! - **Spring 專案無法快速地轉變為 Spring Boot 專案** 兩者的結構已有相當大的差異,花費在轉變的時間與心力絕對不如直接新開一個 Spring Boot 專案重寫 Spring 原有的專案程式來的高效。 - **綁定 JDK 1.8 含以上的版本** Java 在 1.7 > 1.8 之間的改變非常巨大,就算放眼整個Java的變更歷史,也一定有在前三名的程度,原因不外乎 Lambda、Stream、Optional 這幾個功能的問世。也因此 SpringBoot 綁定至少 1.8 版本來說,對於 1.7 含以前版本的 Java 工程師來說是一道關卡。 ## 結語 :::danger 以上簡單介紹 Spring Boot,Kai 會在下一篇介紹開始寫關於其他套件的文章並分享給大家 [六角鼠年鐵人賽 Week 10 - Spring Boot - Build first API](/cWafHYsTT6yRuqedj0CluQ) ::: 首頁 [Kai 個人技術 Hackmd](/2G-RoB0QTrKzkftH2uLueA) ###### tags: `Spring Boot`,`w3HexSchool`