登頂 Github 的 Spring Boot 倉庫!艿艿寫的最肝系列~

點擊上方“芋道源碼”,選擇“設爲星標

管她前浪,還是後浪?

能浪的浪,纔是好浪!

每天 8:55 更新文章,每天掉億點點頭髮...

源碼精品專欄

 

爽!不解釋!

六月份的尾巴,水滴石穿!繼續加油~

摘要: 原創出處 http://www.iocoder.cn/Spring-Boot/quick-start/ 「芋道源碼」歡迎轉載,保留摘要,謝謝!

  • 1. 概述

  • 2. 快速入門

  • 3. Spring Initializr

  • 4. IDEA x Spring Initializr

  • 666. 彩蛋


本文在提供完整代碼示例,可見 https://github.com/YunaiV/SpringBoot-Labs

原創不易,給點個 Star 嘿,一起衝鴨!

1. 概述

我們先來簡單瞭解下 Spring Boot 是什麼?其官方介紹自己如下:

FROM 《Spring 中文文檔 —— Spring Boot 簡介》

使用 Spring Boot 可以很容易地創建出能直接運行的獨立的、生產級別的基於 Spring 的應用。 我們對 Spring 平臺和第三方類庫有自己的考慮,因此您可以從最基本的開始。大多數 Spring Boot 應用只需要很少的 Spring 配置。

您可以使用 Spring Boot 來創建一個可以使用 java -jar 命令來運行或者基於傳統的 war 包部署的應用程序。我們還提供了一個用於運行 spring scripts 的命令行工具。

我們的主要目標是:

  • 爲所有 Spring Boot 開發提供一個更快、更全面的入門體驗。

  • 堅持自我雖好,但當需求出現偏離,您需要能迅速擺脫出來。

  • 提供大量非功能性特性相關項目(例如:內嵌服務器、安全、指標、健康檢查、外部配置)。

  • 絕對沒有代碼生成,也不要求 XML 配置。

是不是看着有點懵逼?重點先理解是加粗的兩句話。簡單來說,通過使用 Spring Boot,我們無需再進行大量的 Spring 配置,只需要少量甚至零配置。

可能這麼說還是有點抽象,我們直接來動手,奧利給,幹就完事了!

2. 快速入門

本小節,我們搭建 Spring Boot 示例項目,並在其中使用 SpringMVC 來提供一個簡單的 HTTP API。

在開始搭建示例項目之前,胖友需要先做好如下準備:

  • JDK8+

    友情提示:Spring Boot 2.X 版本,需要最低的 Java 版本是 8。

  • Maven

    本文希望胖友對 Maven 構建工具有過一定的瞭解。如果沒有的話,可以看看《Maven最全教程,看了必懂》文章。

  • IDEA

    宇宙最強 Java 開發者工具,沒有之一。

2.1 創建 Maven 項目

① 打開 IDEA,點擊菜單 File -> New -> Project... 來創建項目。如下圖所示:

② 選擇 Maven 類型,點擊「Next」按鈕,進入下一步。輸入 Maven 的 GroupIdArtifactId,如下圖所示:

③ 點擊「Next」按鈕,繼續進入下一步。如下圖所示:

④ 點擊「Finish」按鈕,完成 Maven 項目的創建。此時項目如下圖所示:

最終,我們的示例項目會如下圖所示:

下面,我們逐步來看看。

2.2 引入依賴

pom.xml 文件中,引入相關依賴。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.iocoder</groupId>
    <artifactId>demo01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 從 Spring Boot 繼承默認配置 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <!-- 實現對 SpringMVC 的自動化配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>
  • 引入 spring-boot-starter-parent 作爲父 POM,從而繼承其默認配置。

    友情提示:考慮到一般公司項目中都已經有自己的父 POM,可以參考文檔修改。

  • 引入 spring-boot-starter-web 依賴,實現對 SpringMVC 的自動化配置。同時該依賴會自動幫我們引入 SpringMVC 等相關依賴。

2.3 配置文件

在 Spring Boot 項目中,約定通過 application.yaml 配置文件,進行 Spring Boot 自動配置的 Bean 的自定義。

resource 目錄下,創建 application.yaml 配置文件。內容如下:

server:
  port: 8080 # 內嵌的 Tomcat 端口號。默認值爲 8080。
  • 通過 server.port 配置項,設置稍後啓動的內嵌 Tomcat 端口爲 8080 端口。

友情提示:關於配置文件,後續胖友可以閱讀《芋道 Spring Boot 配置文件入門》文章。

2.4 DemoController

創建 DemoController 類,提供一個簡單的 HTTP API。代碼如下:

@RestController
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/echo")
    public String echo() {
        return "echo";
    }

}
  • 標準的 SpringMVC 使用示例,沒有什麼特別哈。

2.5 Application

創建 Application 類,提供 Spring Boot 應用的啓動類。代碼如下:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
  • 在類上,添加 @SpringBootApplication 註解,聲明是一個 Spring Boot 應用。通過該註解,可以帶來 Spring Boot 自動配置等等功能。

  • #main(String[] args) 方法中,我們通過 SpringApplication#run(Class<?> primarySource, String... args) 方法,啓動 Spring Boot 應用。

2.6 簡單測試

① 執行 Application#main(String[] args) 方法,啓動示例項目。

這裏我們會發現,我們無需在部署 Web 項目到外部的 Tomcat 中,而是直接通過 Application#main(String[] args) 方法,就可以直接啓動,非常方便。完全符合 Spring Boot 文檔對自己的介紹:

使用 Spring Boot 可以很容易地創建出能直接運行的獨立的、生產級別的基於 Spring 的應用。

② 此時,我們可以看到 IDEA 控制檯輸出 Spring Boot 啓動日誌如下:

// Spring Boot 自帶 Banner
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.2.RELEASE)

// 啓動 Java 進程使用的 PID 進程號
2020-02-08 15:38:25.724  INFO 10645 --- [           main] cn.iocoder.demo01.Application            : Starting Application on MacBook-Pro-8 with PID 10645 (/Users/yunai/Java/demo01/target/classes started by yunai in /Users/yunai/Java/demo01)
// Spring Boot Profile 機制,暫時可以忽略
2020-02-08 15:38:25.727  INFO 10645 --- [           main] cn.iocoder.demo01.Application            : No active profile set, falling back to default profiles: default
// 內嵌 Tomcat 啓動
2020-02-08 15:38:26.503  INFO 10645 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-02-08 15:38:26.510  INFO 10645 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-02-08 15:38:26.510  INFO 10645 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
2020-02-08 15:38:26.561  INFO 10645 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-02-08 15:38:26.561  INFO 10645 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 799 ms
2020-02-08 15:38:26.693  INFO 10645 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-02-08 15:38:26.839  INFO 10645 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-02-08 15:38:26.842  INFO 10645 --- [           main] cn.iocoder.demo01.Application            : Started Application in 1.396 seconds (JVM running for 1.955)
// SpringMVC DispatcherServlet 初始化
2020-02-08 15:38:44.992  INFO 10645 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-02-08 15:38:44.992  INFO 10645 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-02-08 15:38:44.996  INFO 10645 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 4 ms
// ... 暫時可以忽略
2020-02-08 15:39:37.113  INFO 10645 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
  • 注意,以 // 開頭的每一行,是艿艿添加的註釋喲,胖友仔細看看。

有木有發現,Logger 日誌組件,Spring Boot 都已經幫我們自動配置好啦。是不是很舒服~

③ 使用瀏覽器,訪問 http://127.0.0.1:8080/demo/echo 接口,返回結果爲 "echo"

這說明,SpringMVC 框架,也被 Spring Boot 自動配置完成。同時,使用的是內嵌的 Tomcat 服務器。


至此,我們已經進行了 Spring Boot 的快速入門。後續,胖友可以閱讀《芋道 Spring Boot SpringMVC 入門》文章,進一步的學習。

另外,Spring Boot 自動配置是個很神器,胖友一定一定一定要去閱讀《芋道 Spring Boot 自動配置原理》。知其然,知其所以然。千萬不要只停留在入門或者使用的層級上,而是要不斷死磕。

3. Spring Initializr

我們可以通過使用 Spring Initializr 工具,快速生成一個 Spring Boot 項目。如下圖所示:

下面,我們就來使用 Spring Initializr 來搭建一個示例。

3.1 生成項目

① 使用瀏覽器,打開 https://start.spring.io/ 地址,配置如下圖所示:

② 點擊「Explore」按鈕,瀏覽生成的項目。如下圖所示:

還是蠻酷炫的,可以在線直接瀏覽即將生成的項目。

③ 關閉彈窗,然後點擊「Generate」按鈕,生成項目,會以 .zip 壓縮包的方式進行下載。

3.2 導入 IDEA

① 解壓 .zip 壓縮包,用於稍後導入 IDEA 中。

② 打開 IDEA,點擊菜單 File -> Project from Existing Sources... 來導入項目。如下圖所示:導入項目

③ 然後 Maven 類型,然後不斷點擊「Next」按鈕,最終完成項目的導入。此時項目如下圖所示:項目結構

友情提示:如果胖友選擇的 Spring Boot 版本比較新,可能需要耐心等待下,IDEA 需要等待 Maven 下載相關依賴。

  • resource/static 目錄,放靜態資源。例如說,js、css、圖片等等。

  • resource/templates 目錄,放頁面模板。例如說,thymeleaf、freemarker 等等。

下面,我們逐步來看看。

3.3 引入依賴

pom.xml 文件中,引入相關依賴。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.2.4.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>cn.iocoder</groupId>
 <artifactId>demo02</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>demo02</name>
 <description>Demo project for Spring Boot</description>

 <properties>
  <java.version>1.8</java.version>
 </properties>

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

  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
   <exclusions>
    <exclusion>
     <groupId>org.junit.vintage</groupId>
     <artifactId>junit-vintage-engine</artifactId>
    </exclusion>
   </exclusions>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>

</project>

我們只說差異的地方哈:

  • 設置 <java.version> 屬性爲 1.8,表示使用 JDK8。

  • 引入 spring-boot-starter-test 依賴,實現對 Test 的自動化配置。

    友情提示:對在 Spring Boot 進行單元測試感興趣的胖友,可以後續閱讀《芋道 Spring Boot 單元測試 Test 入門》文章。

  • 引入 spring-boot-maven-plugin 插件,用於將 Spring Boot 項目打包成 jar 或者 war 包。

    友情提示:對構建 Spring Boot 項目感興趣的胖友,可以後續閱讀《芋道 Spring Boot 持續交付 Jenkins 入門》文章。

3.4 配置文件

配置文件 application.properties 內容爲空。

注意,Spring Boot 支持 YAML、PROPERTIES、JSON 等等格式的配置格式。

3.5 Demo02Application

Demo02Application 類,提供 Spring Boot 應用的啓動類。代碼如下:

@SpringBootApplication
public class Demo02Application {

 public static void main(String[] args) {
  SpringApplication.run(Demo02Application.class, args);
 }

}

還是老樣子,通過執行 #main(String[] args) 方法,啓動 Spring Boot 應用。這裏,艿艿就不演示了,胖友自己去倒騰哈。

3.6 Demo02ApplicationTests

Demo02ApplicationTests 類,單元測試類。代碼如下:

@SpringBootTest
class Demo02ApplicationTests {

 @Test
 void contextLoads() {
 }

}
  • 在類上,添加 @SpringBootTest 註解,聲明這是一個 Spring Boot 環境下的單元測試類。

運行 #contextLoads() 方法,執行一次單元測試。

4. IDEA x Spring Initializr

IDEA 內置了 Spring Boot 插件,提供了對 Spring Initializr 集成。

Spring Boot / Spring Initializr project wizard.

下面,我們來使用該插件,創建一個 Spring Boot 項目。

① 打開 IDEA,點擊菜單 File -> New -> Project... 來創建項目。如下圖所示:

② 選擇 Spring Initializr 類型,點擊「Next」按鈕,進入下一步。輸入 Maven 的 GroupIdArtifactId,如下圖所示:

③ 點擊「Next」按鈕,選擇需要的依賴,這裏暫時我們只需要 Web 依賴。如下圖所示:

④ 點擊「Next」按鈕,之後點擊「Finish」按鈕,完成 Maven 項目的創建。此時項目如下圖所示:

和「3. Spring Initializr」是一致的,就不嗶嗶重複解釋了。

666. 彩蛋

至此,我們已經完成了 Spring Boot 的快速入門,是不是非常好用。艿艿是 2011 年開始使用 Spring 框架的,從最早的 XML 配置,再到後面配合 Java 註解,之後又出了 JavaConfig 配置,一點一點感受 Spring 在開發友好的誠意。

更多 Spring Boot 的內容,歡迎胖友到 https://github.com/YunaiV/SpringBoot-Labs 中閱讀艿艿寫的《Spring Boot 專欄》。如果可以的話,記得給這個倉庫點個 Star。



歡迎加入我的知識星球,一起探討架構,交流源碼。加入方式,長按下方二維碼噢

已在知識星球更新源碼解析如下:

最近更新《芋道 SpringBoot 2.X 入門》系列,已經 20 餘篇,覆蓋了 MyBatis、Redis、MongoDB、ES、分庫分表、讀寫分離、SpringMVC、Webflux、權限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能測試等等內容。

提供近 3W 行代碼的 SpringBoot 示例,以及超 4W 行代碼的電商微服務項目。

獲取方式:點“在看”,關注公衆號並回復 666 領取,更多內容陸續奉上。

兄弟,一口,點個????

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章