重學 Spring Boot

No.304發表於2021-07-19

什麼是Spring Boot

Spring Boot 是 Spring 開源組織下的一個子專案,也是 Spring 元件一站式解決方案,主要是為了簡化使用 Spring 框架的難度和簡化 Spring 框架複雜的XML配置。使用 Spring Boot 可以很容易建立一個獨立執行的、基於 Spring 的生產級應用程式,而且Spring Boot 對 Spring 平臺和第三方庫做了一些版本適配,這樣我們就可以儘快的上手。

使用 Spring Boot 來不僅可以建立基於 war 方式部署的傳統Java應用程式,也可以通過建立獨立的不依賴任何容器(如 tomcat 等)的應用,只需使用 “java -jar” 就能啟動。Spring Boot 還提供了一個執行 "spring scripts " 的命令列工具。

Spring Boot 的設計目標

為所有的 Spring 開發提供一個從根本上更快、更廣泛的入門體驗。
開箱即用,但當需求開始偏離預設值時,可以快速從中解放出來使用個性化的定製。
提供一系列大型應用專案中經常用到的公共的非功能特性(如嵌入式伺服器、安全、度量、健康檢查和外部化配置)。
零程式碼生成零XML配置。

第一個 Spring Boot 應用程式

我們在學習一門新的開發語言,或者開發框架的時候,一般都習慣寫個 Hello World 的專案。一方面可以驗證基礎環境的搭建是否正確,另一方面可以快速瞭解整個開發流程。現在我們建立一個 Hello world 的 Spring Boot 專案。我這裡使用的IDE 是 Intellij IDEA 。

第一步

開啟Intellij IDEA 使用 Spring Initializr 嚮導 新建 Hello World的專案

Spring Boot Started 1

選擇 Spring Web, 然後點選 Finish 等待專案建立完成。

Spring Boot Started 2

第二步

專案已經建立完成。下面我們來看一下專案結構:

Spring Boot Started 3

來看下 HelloApplication 入口類的內容, HelloApplication 裡面定義了一個 main 函式,一個基本的 @SpringBootApplication 註解。後續的文章會詳細解釋一下 @SpringBootApplication 註解。現在我們只要知道有了 @SpringBootApplication 註解,所有的 Spring Boot 專案依賴都可以掃描加入進來。

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

再看一下 pom.xml 檔案有那些依賴專案, POM 檔案主要依賴了spring-boot-starter-web 專案,該專案包含了 web 專案所需的相關依賴,包括內建了 tomcat 伺服器。另外還有一個比較重要的外掛 spring-boot-maven-plugin,方便我們可以對 Spring Boot 專案打包成一個獨立執行的 jar 包。

<?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.5.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.javanorth</groupId>
    <artifactId>hello</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>hello</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>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

第三步

修改 HelloApplication 主類,新增一個/hello 的請求

@RestController
@SpringBootApplication
public class HelloApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }
    @GetMapping("/hello")
    public String hello() {
        return "Hello World";
    }
}

第四步

在主類上,右鍵選單欄裡選擇 Run “HelloApplication” 命令,啟動專案。如下圖所示,2秒鐘就能啟動完成。從輸出日誌可以看出,專案啟動了內建的 tomcat 伺服器,分配了8080 作為本次 web 伺服器的請求埠。

Spring Boot Started 4

好了,我們現在訪問一下 /hello 請求, 如下圖所示,輸出了 Hello World。

Spring Boot Started 5

是不是很簡單,我們很快就上手完成了第一個 Hello World 應用。

第五步

我們再來看下,如何打包一個 Spring Boot 專案呢? 前文我們已經提到了 spring-boot-maven-plugin 外掛,所以我們可以使用mvn package 來對其進行打包

$ mvn package 
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------< com.javanorth:hello >-------------------------
[INFO] Building hello 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ...
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ hello ---
[INFO] Building jar: /Users/wbf/Documents/javanorth/target/hello-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.5.0:repackage (repackage) @ hello ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.065 s
[INFO] Finished at: 2021-05-27T16:33:17+08:00
[INFO] ------------------------------------------------------------------------

打包完成,檢視 target 目錄,我們能看到 hello-0.0.1-SNAPSHOT.jar 檔案。

Spring Boot Started 6

從上圖可以看到有個名字相類似的檔案,hello-0.0.1-SNAPSHOT.jar.original 檔案是 Spring Boot repackage 之前的檔案,也就是說這個檔案其實就是 maven 建立的原始jar檔案,不包含其他依賴的jar包。

如果我們想看一下 hello-0.0.1-SNAPSHOT.jar 裡面包含那些內容,有沒有什麼快速的辦法呢,我這裡給大家提供一個命令列的方法,使用 “jar tvf ” 就行。

jar tvf hello-0.0.1-SNAPSHOT.jar

小結

從上面的示例可以看出開始一個新的 Spring Boot 專案非常簡單,Spring Boot 提供了專門的建立嚮導專案,簡化了大量的 Spring 專案的建立難度。全程下來不到5分鐘,我們就完成了專案的建立和 hello world 的輸出演示。

後續的文章會給大家講解 Spring Boot 的更多的細節,給大家帶來更詳細的技術文章,包括原始碼分析、面試題講解、一些有趣的實現等。關注公眾號【Java技術指北】第一時間獲取最新 Spring Boot 的相關技能。

[EOF]

相關文章