1. 程式人生 > >跟武哥一起學 Spring Boot

跟武哥一起學 Spring Boot

課程介紹

本達人課選用了當前 Spring Boot 最新版本 2.0.3 Release,課程文章均基於作者在實際專案中剝離出來的場景和 Demo,目標是帶領學習者快速上手 Spring Boot,將 Spring Boot 相關技術點快速運用到微服務專案中。

達人課主要分為兩大部分:基礎篇和進階篇。

基礎篇主要介紹 Spring Boot 在專案中最常使用的功能點,旨在帶領學習者快速掌握 Spring Boot 在開發時需要的知識點,能夠把 Spring Boot 相關技術運用到實際專案架構中去。主要內容包括 JSON 資料封裝、日誌記錄、屬性配置、MVC 支援、線上文件、模板引擎、異常處理、AOP 處理、持久層整合等等。

進階篇主要介紹 Spring Boot 在專案中會使用到的高階技術點,包括一些整合元件,旨在帶領學習者在專案中遇到具體的場景時能夠快速整合,完成對應的功能。主要內容包括攔截器、監聽器、快取、安全認證、分詞外掛、訊息佇列等等。

專家推薦

“隨著微服務架構的發展,Spring Boot 使用得越來越廣泛。跟武哥一起學 Spring Boot 課程,幫您真正做到快速上手,將技術點切實運用到微服務專案中。”

——愛奇藝遊戲事業部 高階技術經理 蔣華江

作者介紹

倪升武,前華為軟體開發工程師,CSDN 部落格專家。畢業於同濟大學,學位碩士。曾先後就職於 eBay、愛奇藝、華為。熟悉 C/C++、Java、Spring、SpringMVC、Spring Boot、Spring Cloud、Redis、MyBatis、資料結構、設計模式等等,開發過諸多大型專案,有豐富的專案經驗。熱愛程式設計,樂於分享。

課程內容

導讀:課程概覽

Spring Boot 是什麼

我們知道,從2002年開始,Spring 一直在飛速的發展,如今已經成為了 Java EE(Java Enterprise Edition) 開發中真正意義上的標準。但是隨著技術的發展,Java EE 使用 Spring 逐漸變得笨重起來,大量的 XML 檔案存在於專案之中。繁瑣的配置,整合第三方框架的配置問題,導致了開發和部署效率的降低。

2012年10月,Mike Youngstrom 在 Spring JIRA 中建立了一個功能請求,要求在 Spring 框架中支援無容器 Web 應用程式體系結構。他談到了在主容器引導 Spring 容器內配置 Web 容器服務。這是 JIRA 請求的摘錄:

我認為 Spring 的 Web 應用體系結構可以大大簡化,如果它提供了從上到下利用 Spring 元件和配置模型的工具和參考體系結構。在簡單的 main() 方法引導的 Spring 容器內嵌入和統一這些常用 Web 容器服務的配置。

這一要求促使了 2013 年初開始的 Spring Boot 專案的研發,到今天,Spring Boot 的版本已經到了 2.0.3 Release。Spring Boot 並不是用來替代 Spring 的解決方案,而是和 Spring 框架緊密結合用於提升 Spring 開發者體驗的工具。同時它集成了大量常用的第三方庫配置,Spring Boot 應用中這些第三方庫幾乎可以是零配置的開箱即用(out-of-the-box),大部分的 Spring Boot 應用都只需要非常少量的配置程式碼(基於 Java 的配置),開發者能夠更加專注於業務邏輯。

為什麼學習 Spring Boot

從 Spring 官方來看

我們開啟 Spring 的官方網站,可以看到下圖:

Spring官網首圖

我們可以看到圖中官方對 Spring Boot 的定位:Build Anything, Build 任何東西。Spring Boot 旨在儘可能快地啟動和執行,並且只需最少的 Spring 前期配置。同時我們也來看一下官方對後面兩個的定位:

Spring Cloud:Coordinate Anything,協調任何事情;

Spring Cloud Data Flow:Connect everything,連線任何東西。

仔細品味一下,Spring 官網對 Spring Boot、Spring Cloud 和 Spring Cloud Data Flow 三者定位的措辭非常有味道,同時也可以看出,Spring 官方對這三個技術非常重視,是現在以及今後學習的重點。

從 Spring Boot 的優點來看

Spring Boot 有哪些優點?主要給我們解決了哪些問題呢?我們用下面這張圖來說明:

Spring Boot的優點

良好的基因

Spring Boot 是伴隨著 Spring 4.0 誕生的,從字面理解,Boot 是引導的意思,因此 Spring Boot 旨在幫助開發者快速搭建 Spring 框架。Spring Boot 繼承了原有 Spring 框架的優秀基因,使 Spring 在使用中更加方便快捷。

Spring Boot與Spring

簡化編碼

舉個例子,比如我們要建立一個 Web 專案,使用 Spring 的朋友都知道,在使用 Spring 的時候,需要在 pom 檔案中新增多個依賴,而 Spring Boot 則會幫助開發者快速啟動一個 Web 容器,在 Spring Boot 中,我們只需要在 pom 檔案中新增如下一個 starter-web 依賴即可。

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId></dependency>

我們點選進入該依賴後可以看到,Spring Boot 的這個 starter-web 已經包含了多個依賴,包括之前在 Spring 工程中需要匯入的依賴,我們看一下其中的一部分,如下:

<!-- .....省略其他依賴 --><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-web</artifactId>    <version>5.0.7.RELEASE</version>    <scope>compile</scope></dependency><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-webmvc</artifactId>    <version>5.0.7.RELEASE</version>    <scope>compile</scope></dependency>

由此可以看出,Spring Boot 大大簡化了我們的編碼,我們不用一個個匯入依賴,直接一個依賴即可。

簡化配置

Spring 雖然是 Java EE 輕量級框架,但由於其繁瑣的配置,一度被人認為是“配置地獄”。各種 XML、Annotation 配置讓人眼花繚亂,而且配置多的話,如果出錯了也很難找出原因。Spring Boot 更多的是採用 Java Config 的方式,對 Spring 進行配置。下面看個例子。

我新建一個類,但是我不用 @Service 註解,也就是說,它是個普通的類,那麼我們如何使它也成為一個 Bean 讓 Spring 去管理呢?只需要 @Configuration@Bean 兩個註解即可,如下:

public class TestService {    public String sayHello () {        return "Hello Spring Boot!";    }}
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class JavaConfig {    @Bean    public TestService getTestService() {        return new TestService();    }}

@Configuration 表示該類是個配置類,@Bean 表示該方法返回一個 Bean。這樣就把 TestService 作為 Bean 讓 Spring 去管理了,在其他地方,我們如果需要使用該 Bean,和原來一樣,直接使用 @Resource 註解注入進來即可使用,非常方便。

@Resourceprivate TestService testService;

另外,部署配置方面,原來 Spring 有多個 XML 和 Properties 配置,在 Spring Boot 中只需要一個 application.yml 即可。

簡化部署

使用 Spring 時,專案部署時需要我們在伺服器上部署 Tomcat,然後把專案打成 War 包扔到 Tomcat 裡。使用 Spring Boot 後,我們不需要在伺服器上去部署 Tomcat,因為 Spring Boot 內嵌了 Tomcat,我們只需要將專案打成 Jar 包,使用 java -jar xxx.jar 一鍵式啟動專案。

另外,也降低對執行環境的基本要求,環境變數中有 JDK 即可。

簡化監控

我們可以引入 spring-boot-start-actuator 依賴,直接使用 REST 方式來獲取程序的執行期效能引數,從而達到監控的目的,比較方便。但是 Spring Boot 只是個微框架,沒有提供相應的服務發現與註冊的配套功能,沒有外圍監控整合方案,沒有外圍安全管理方案,所以在微服務架構中,還需要 Spring Cloud 來配合一起使用。

從未來發展的趨勢來看

微服務是未來發展的趨勢,專案會從傳統架構慢慢轉向微服務架構,因為微服務可以使不同的團隊專注於更小範圍的工作職責、使用獨立的技術、更安全更頻繁地部署。而繼承了 Spring 的優良特性,與 Spring 一脈相承,而且支援各種 REST API 的實現方式。Spring Boot 也是官方大力推薦的技術,可以看出,Spring Boot 是未來發展的一個大趨勢。

本課程能學到什麼

本課程使用目前 Spring Boot 最新版本 2.0.3 Release,課程文章均基於我在實際專案中剝離出來的場景和 Demo,目標是帶領學習者快速上手 Spring Boot,將 Spring Boot 相關技術點快速運用在微服務專案中。

課程共分為兩部分:基礎篇和進階篇。

基礎篇(第01—10課)主要介紹 Spring Boot 在專案中最常使用的一些功能點,旨在帶領學習者快速掌握 Spring Boot 在開發時需要的知識點,能夠把 Spring Boot 相關技術運用到實際專案架構中去。主要內容包括 JSON 資料封裝、日誌記錄、屬性配置、MVC 支援、線上文件、模板引擎、異常處理、AOP 處理、持久層整合等等。

進階篇(第11—17課)主要是介紹 Spring Boot 在專案中會用到的更為高階的技術點,包括一些整合元件,旨在帶領學習者在專案中遇到具體的場景時能夠快速整合,完成對應的功能。主要內容包括攔截器、監聽器、快取、安全認證、分詞外掛、訊息佇列等等。

認真讀完該系列文章之後,學習者會快速瞭解並掌握 Spring Boot 在專案中最常用的技術點,課程的最後,會基於課程內容搭建一個 Spring Boot 專案的空架構,該架構也是從實際專案中剝離出來,學習者可以運用該架構於實際專案中,具備使用 Spring Boot 進行實際專案開發的能力。

課程所有原始碼提供免費下載:

適合閱讀的人群

本課程適合以下人群閱讀:

  • 有一定的 Java 語言基礎,瞭解 Spring、Maven 的在校學生或自學者;
  • 有傳統專案經驗,想往微服務方向發展的工作人員;
  • 熱衷於新技術並對 Spring Boot 感興趣的人員;
  • 希望瞭解 Spring Boot 2.0.3 的研究人員。

本課程開發環境和外掛

本課程的開發環境:

  • 開發工具:IDEA 2017
  • JDK 版本: JDK 1.8
  • Spring Boot 版本:2.0.3 Release
  • Maven 版本:3.5.2

涉及到的外掛有:

  • FastJson
  • Swagger2
  • Thymeleaf
  • MyBatis
  • Redis
  • ActiveMQ
  • Shiro
  • Lucence
第01課:Spring Boot 開發環境搭建和專案啟動

上一篇對 Spring Boot 的特性做了一個介紹,本文主要對 JDK 的配置、Spring Boot 工程的構建和專案的啟動、Spring Boot 專案工程的結構做一下講解和分析。

JDK 的配置

本課程使用 IDEA 進行開發,在 IDEA 中配置 JDK 的方式很簡單,開啟 File->Project Structure,如下圖所示:

IDEA中配置jdk

  1. 選擇 SDKs;
  2. 在 JDK home path 中選擇本地 JDK 的安裝目錄;
  3. 在 Name 中為 JDK 自定義名字。

通過以上三步驟,即可匯入本地安裝的 JDK。對於使用 STS 或者 Eclipse 的朋友,可以通過以下兩步完成新增:

  • window -> preference -> java -> Instralled JRES:新增本地 JDK。

  • window -> preference -> java -> Compiler 選擇 JRE,和 JDK 保持一致。

Spring Boot 工程的構建

IDEA 快速構建

IDEA 中可以通過 File -> New -> Project 來快速構建 Spring Boot 工程。如下,選擇 Spring Initializr,在 Project SDK 中選擇剛剛我們匯入的 JDK,點選 Next,跳至專案的配置資訊頁,按下面提示進行填寫即可。

  • Group:填企業域名,本課程使用 com.itcodai。
  • Artifact:填專案名稱,本課程中每一課的工程名以 course+課號 命名,本文使用 course01。
  • Dependencies:可以新增我們專案中所需要的依賴資訊,根據實際情況來新增,本課程只需要選擇 Web 即可。

官方構建

我們可採用的第二種方式是通過官方構建,步驟如下:

  • 訪問:http://start.spring.io/。
  • 在頁面上輸入相應的 Spring Boot 版本、Group 和 Artifact 資訊以及專案依賴,然後建立專案。

建立Spring Boot工程

  • 解壓後,使用 IDEA 匯入該 Maven 工程:File -> New -> Model from Existing Source,然後選擇解壓後的專案資料夾即可。使用 Eclipse 的朋友,可以通過 Import -> Existing Maven Projects -> Next,然後選擇解壓後的專案資料夾即可。

Maven 配置

建立了 Spring Boot 專案之後,需要進行 Maven 配置。開啟 File -> settings,搜尋 Maven,配置一下本地的 Maven 資訊。如下:

maven配置

在 Maven home directory 中選擇本地 Maven 的安裝路徑;在 User settings file 中選擇本地 Maven 的配置檔案所在路徑。在配置檔案中,我們配置一下國內阿里的映象,這樣在下載 Maven 依賴時,速度會很快。

<mirror>    <id>nexus-aliyun</id>    <mirrorOf>*</mirrorOf>    <name>Nexus aliyun</name>    <url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>

使用 Eclipse 的朋友,可以通過 window -> preference -> Maven -> User Settings 來配置,配置方式和上面一致。

編碼配置

同樣地,新建專案後,我們一般都需要配置編碼,這點非常重要,很多初學者都會忘記這一步,所以要養成良好的習慣。

IDEA 中,仍然是開啟 File -> settings,搜尋 encoding,配置一下本地的編碼資訊。如下:

編碼配置

使用 Eclipse 的朋友,有兩個地方需要設定一下編碼:

  • 選擇 window -> perferences -> General -> Workspace,將 Text file encoding 改成 UTF-8。
  • 選擇 window -> perferences -> General -> content types,選中 Text,將 Default encoding 填入 UTF-8。

OK,編碼設定完成即可啟動專案工程了。

Spring Boot 專案工程結構

Spring Boot 專案總共有三個模組,如下圖所示:

Spring Boot專案工程結構

  • src/main/java 路徑:主要編寫業務程式;
  • src/main/resources 路徑:存放靜態檔案和配置檔案;
  • src/test/java 路徑:主要編寫測試程式。

預設情況下,如上圖所示會建立一個啟動類 Course01Application,該類上面有個 @SpringBootApplication 註解,該啟動類中有個 main 方法,沒錯,Spring Boot 啟動只要執行該 main 方法即可,非常方便。另外,Spring Boot 內部集成了 Tomcat,不需要我們人為手動去配置 Tomcat,開發者只需要關注具體的業務邏輯即可。

到此為止,Spring Boot 就啟動成功了,為了比較清楚地看到效果,我們寫個 Controller 來測試一下,如下:

package com.itcodai.course01.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@[email protected]("/start")public class StartController {    @RequestMapping("/springboot")    public String startSpringBoot() {        return "Welcome to the world of Spring Boot!";    }}

重新執行 main 方法啟動專案,在瀏覽器中輸入: localhost:8080/start/springboot,如果看到 “Welcome to the world of Spring Boot!”,那麼恭喜你專案啟動成功!

Spring Boot 就是這麼簡單方便!埠號預設是8080,如果想要修改,可以在 application.yml 檔案中使用 server.port 來人為指定埠,如8001埠:

server:  port: 8001

總結

本文我們快速學習瞭如何在 IDEA 中匯入 JDK,以及使用 IDEA 如何配置 Maven 和編碼,如何快速的建立和啟動 Spring Boot 工程。IDEA 對 Spring Boot 的支援非常友好,建議大家使用 IDEA 進行 Spring Boot 的開發。

從下一課開始,我們真正進入 Spring Boot 的學習中。

課程原始碼下載地址:

戳我下載

第02課:Spring Boot 返回 JSON 資料及資料封裝
第03課:Spring Boot 使用 SLF4J 進行日誌記錄
第04課:Spring Boot 中的專案屬性配置
第05課:Spring Boot 中的 MVC 支援
第06課:Spring Boot 整合 Swagger2 展現線上介面文件
第07課:Spring Boot 整合 Thymeleaf 模板引擎
第08課:Spring Boot 中的全域性異常處理
第09課:Spring Boot 中的切面 AOP 處理
第10課:Spring Boot 中整合 MyBatis
第11課:Spring Boot 中的事務配置管理
第12課:Spring Boot 中使用監聽器
第13課:Spring Boot 中使用攔截器
第14課:Spring Boot 中整合 Redis
第15課:Spring Boot 中整合 ActiveMQ
第16課:Spring Boot 中整合 Shiro
第17課:Spring Boot 整合 Lucence
第18課:Spring Boot 搭建實際專案開發中的架構

閱讀全文: http://gitbook.cn/gitchat/column/5b3c9f35a3442272491a176a