Spring Boot 2.2.5 嚐鮮-入門指南

如果您是"Spring Boot"或“Spring”新手,那麼可通過本章來入門.

本章回答了基本的“what?”, “how?” and “why?”等問題,幷包含Spring Boot介紹,安裝說明等內容.

之後,我們將引導您構建第一個Spring Boot 應用程序,並討論它的一些核心概念.

1. Spring Boot介紹

Spring Boot可輕鬆創建獨立且生產級的Spring應用程序.

為方便您快速構建應用程序,我們對Spring平臺和第三方庫進行了有效整合.

大多數Spring Boot應用程序只需要較少的Spring配置就可直接運行。

你可以使用Spring Boot來創建Java應用程序(可通過java -jar或傳統的war包來啟動這些應用程序)。

此外,我們還提供一個可運行“spring>

我們的主要目標是:

  • 為所有Spring開發提供更快且範圍更廣的入門經驗.
  • 開廂即用,在需求偏離默認值時也能快速擺脫困境.
  • 提供一系列大型項目所需的非功能性需求(如,內嵌服務器,安全,指標,健康檢查外部配置).
  • 不用生成代碼,也不需要XML配置。

2. 系統要求

Spring Boot 2.2.5.RELEASE依賴Java 8, 並可向上兼容到Java 13(包含).

此外,它還依賴Spring Framework 5.2.4.RELEASE或以上版本.

它支持如下構建工具:


Spring Boot 2.2.5 嚐鮮-入門指南

2.1. Servlet 容器

Spring Boot支持如下內嵌servlet容器:


Spring Boot 2.2.5 嚐鮮-入門指南

3. 安裝Spring Boot

Spring Boot可以與“經典” Java開發工具一起使用,也可以作為命令行工具安裝。

無論哪種方式,都需要Java SDK v1.8或更高版本。

在開始之前,您應該使用以下命令檢查當前的Java安裝:

$ java -version

如果您不熟悉Java開發,或只是想用一下Spring Boot,則可以先嚐試使用Spring Boot CLI (命令行界面)。否則,請先閱讀經典安裝說明.

3.1. 針對Java開發者的安裝說明

你可以像標準Java庫一樣使用Spring Boot.

為此,請在你的類路徑上包含相應的spring-boot-*.jar文件.

Spring Boot不需要與任何工具進行集成,因此你可以使用任何的IDE或文本編輯器來開發.

另外,Spring Boot應用程序也沒有任何特殊之處,因此你可以像其它Java程序一樣運行和調試Spring Boot應用程序.

儘管您可以複製Spring Boot jar,但我們仍然建議您使用可支持依賴管理的構建工具(如:Maven或Gradle).

3.1.1. Maven 安裝

Spring Boot兼容Apache Maven 3.3+版本.

如果還沒有安裝過Maven,則可以參考maven.apache.org上的相關說明.

提示

許多操作系統都可通過包管理器來安裝Maven.


如果您用的是OSX Homebrew,請嘗試brew install maven來安裝maven。

Ubuntu用戶可運行sudo apt-get install maven命令來安裝maven.

帶有Chocolatey的windows用戶可通過管理員命令窗口來安裝maven(運行choco install maven命令).

Spring Boot 依賴可通過org.springframework.boot groupId來配置.

通常,你的Maven POM文件會繼承spring-boot-starter-parent項目,並在其中聲明一個或多個“Starters”.

Spring Boot還提供了一個可選的Maven plugin 來創建可執行jar.

下面是一個典型的pom.xml文件配置:

<project>

<modelversion>4.0.0/<modelversion>

<groupid>com.example/<groupid>

<artifactid>myproject/<artifactid>

<version>0.0.1-SNAPSHOT/<version>

<parent>

<groupid>org.springframework.boot/<groupid>

<artifactid>spring-boot-starter-parent/<artifactid>

<version>2.2.5.RELEASE/<version>

<description>

<developers> <developer>/<developers>

<licenses> <license>/<licenses>

<dependencies>

<dependency>

<groupid>org.springframework.boot/<groupid>

<artifactid>spring-boot-starter-web/<artifactid>

<build>

<plugins>

<plugin>

<groupid>org.springframework.boot/<groupid>

<artifactid>spring-boot-maven-plugin/<artifactid>

提示

雖然spring-boot-starter-parent是使用Spring Boot的一種好方式,但這種方式未必適合所有場景.

例如,有時,你可能需要繼承不同的父POM,或者可能不想用我們的默認設置.

在這種情況下,請參考using-spring-boot.html來了解使用導入範圍的替代方案.

3.1.2. Gradle 安裝

Spring Boot完全兼容5.x和6.x.雖然當前我們也支持4.10,但該支持會在後期版本中刪除.

如果您還沒有安裝過Gradle,則可以參與gradle.org中的相關說明.

Spring Boot依賴可通過org.springframework.boot group來聲明.

通常,你的項目可通過1個或多個“Starters”來引入依賴.

Spring Boot 提供了一個有用的Gradle plugin 來簡化依賴聲明和創建可執行jar.

Gradle Wrapper

在構建項目時,Gradle Wrapper提供了一種獲取Gradle的好方法.

它是一個小的腳本和庫,可隨代碼一起提交來引導構建過程。

參考docs.gradle.org/current/userguide/gradle_wrapper.html來了解詳情.

有關Spring Boot和Gradle入門的更多詳細信息,請參見Gradle插件參考指南的“Getting Started section ”部分。

3.2. 安裝Spring Boot CLI

Spring Boot CLI (Command Line Interface)是一個命令行工具,通過該工具你可以快速構建項目原型. 它允許您運行Groovy腳本,這樣你就可以使用熟悉的Java類似語法(無樣板代碼).

即便不用CLI也能使用Spring Boot,但它絕對是啟動Spring應用程序的最快方法.

3.2.1. 手動安裝

你可以從Spring軟件倉庫下載Spring CLI 發行包:

  • spring-boot-cli-2.2.5.RELEASE-bin.zip
  • spring-boot-cli-2.2.5.RELEASE-bin.tar.gz

此外,我們還提供了最新快照版本.

下載完成後,請按照解壓包中的INSTALL.txt說明進行安裝.

在.zip文件中存在一個bin/目錄,該目錄下含有spring腳本(對於Windows,其腳本為spring.bat).

此外,你也可以使用java -jar命令來運行.jar文件(該腳本可幫助你確認類路徑是否設置正確).

3.2.2. 使用SDKMAN!進行安裝

SDKMAN! (Software Development Kit Manager)可用於管理多個版本的二進制SDK,包括:Groovy 和Spring Boot CLI.

可通過sdkman.io來獲取SDKMAN!,並使用如下命令來安裝Spring Boot:

$ sdk install springboot $ spring --version Spring Boot v2.2.5.RELEASE

如果你想開發CLI功能以及能輕鬆地訪問你的構建版本,則可使用如下命令:

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.2.5.RELEASE-bin/spring-2.2.5.RELEASE/ $ sdk default springboot dev $ spring --version Spring CLI v2.2.5.RELEASE

上面我們安裝了一個spring本地實例-dev.

它指向您的目標構建位置,因此,每次重新構建Spring Boot時,spring都是最新的。

你可以通過如下命令來查看:

$ sdk ls springboot

================================================================================ Available Springboot Versions ================================================================================ > + dev * 2.2.5.RELEASE ================================================================================ + - local version * - installed > - currently in use ================================================================================

3.2.3. OSX Homebrew 安裝

如果你的操作系統是Mac並用到了Homebrew,那麼你可以使用如下命令來安裝Spring Boot CLI:

$ brew tap pivotal/tap $ brew install springboot

Homebrew會將spring安裝到/usr/local/bin.

提示

如果未看到spring,那說明brew安裝可能已經過期了.

在這種情況下,你可以運行brew update命令,然後再重試.

3.2.4. MacPorts Installation

如果你的操作系統是Mac並用到了MacPorts,那麼你可以使用如下命令來安裝Spring Boot CLI:

$ sudo port install spring-boot-cli


3.2.5. 命令行補全

Spring Boot CLI 為BASH and zsh shell提供了命令補全功能.

可從任何的shell中獲取腳本(也稱為spring),也可將它放入個人或系統範圍的bash補全初始化中.

在Debian系統上,系統級腳本位於/shell-completion/bash中,在啟動新的Shell時它會執行該目錄中的所有腳本。

例如,如果你是通過SDKMAN!來安裝Spring Boot CLI的,則可以通過如下命令來手動運行腳本:

$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring $ spring grab help jar run test version

提示

如果是通過Homebrew或MacPorts來安裝Spring Boot CLI的,那麼命令行補全腳本會自動註冊到您的Shell中。


3.2.6. Windows Scoop 安裝

如果你的操作系統是Windows,並有用到Scoop,那麼你可以通過如下命令來安裝Spring Boot CLI:

> scoop bucket add extras > scoop install springboot

Scoop會將spring安裝到~/scoop/apps/springboot/current/bin.

提示

如果未看到spring,則說明scoop安裝已經過期了。

在這種情況下,你可以運行scoop update,並再次重試.


3.2.7. Quick-start Spring CLI Example

你可以使用下面的web程序來測試你的安裝。首先,創建一個名為app.groovy的文件,如下所示:

@RestController class ThisWillActuallyRun { @RequestMapping("/") String home() { "Hello World!" } }

然後,再通過shell來運行,如下所示:

$ spring run app.groovy

提示

第1次運行因為要下載依賴包,所以會很慢.後續運行就會很快了。


用你喜歡的瀏覽器打開localhost:8080.一切正常的話,你應該能看到如下輸出:

Hello World!


3.3. 升級老版本Spring Boot

如果你是從Spring Boot 1.x版本升級的,可查看“migration guide” on the project wiki 來了解升級細節. 也可參考“release notes”來了解每個版本的新特性.

升級到新版本時,有些屬性可能已改名或被刪除. Spring Boot提供了一種在啟動時分析應用程序環境並打印診斷的方法,還可以在運行時為您臨時遷移屬性。 要啟用該功能,請將以下依賴添加到您的項目中:

<dependency> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-properties-migrator/<artifactid> <scope>runtime/<scope> /<dependency>

提示

較晚加到環境的屬性(如:@PropertySource)將不再考慮.

一旦完成了遷移,請記得將其從你的項目依賴中刪除.

要升級現有CLI安裝,可選用合適的包管理命令(例如:brew upgrade).

如果你是通過手動方式來安裝CLI的,可參考標準說明, 記住:需更新PATH環境變量來刪除所有舊引用.

4. 開發第一個Spring Boot Application

本節我們將開發一個簡單的“ Hello World!”web應用程序。

我們將使用Maven來構建該項目(大多數IDE都支持Maven)。

提示

spring.io 網站包含許多使用Spring Boot的入門指南.

如果你想解決特定問題,可首先閱讀該指南.


可進入start.spring.io網站並在依賴搜索器中選擇"Web" starter來跳過下面的步驟.

該操作會生成一個全新的項目結構,方便您快速上手編碼.

有關細節,可查看Spring Initializr documentation.

在開始之前,請先打開終端(命令行提示窗口),並執行如下命令來確保Java,Maven版本的正確性:

$ java -version

java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14)

Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

$ mvn -v

Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00) Maven home: /usr/local/Cellar/maven/3.3.9/libexec

Java version: 1.8.0_102, vendor: Oracle Corporation

提示

示例程序會在自身目錄中創建.後續介紹會假定你已經創建好了目錄,並且該目錄就是你當前的工作目錄.

4.1. 創建POM

我們需從創建一個Maven pom.xml文件開始. pom.xml是構建項目的配方.

打開你喜歡的文本編輯器,並增加如下內容:

<project>

<modelversion>4.0.0/<modelversion>

<groupid>com.example/<groupid>

<artifactid>myproject/<artifactid>

<version>0.0.1-SNAPSHOT/<version>

<parent>

<groupid>org.springframework.boot/<groupid>

<artifactid>spring-boot-starter-parent/<artifactid>

<version>2.2.5.RELEASE/<version>

<description>

<developers>

<developer>

<licenses>

<license>

上述清單為您展示了使用Spring Boot的基礎構建.

你可以運行mvn package來進行測試(你可以忽略“jar will be empty - no content was marked for inclusion!”警告).

提示

現在,你可以將項目導入IDE (大多數現代Java IDE都內置了對Maven的相關支持).

為簡單起見,在此示例中,我們繼續使用純文本編輯器。

4.2. 添加類路徑依賴

Spring Boot提供了許多“Starters”來向類路徑添加jar.

我們冒煙測試(smoke tests)應用程序在POM的parent部分中使用了spring-boot-starter-parent. spring-boot-starter-parent是一個可提供有用Maven默認值的特殊starter.

此外,為省略依賴中的version標籤,它還提供了dependency-management部分。

其它“Starters”則提供了開發特定類型應用程序時所需的特殊依賴.

由於我們開發的是web應用程序,因此我們添加了spring-boot-starter-web依賴。

在此之前,我們可通過下面的命令來查看依賴狀態:

$ mvn dependency:tree

[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

mvn dependency:tree命令可打印出項目依賴的樹形表示.

你可以看到spring-boot-starter-parent本身並沒有提供任何依賴.

要添加所需依賴,可編輯pom.xml並在parent部分的下方添加spring-boot-starter-web依賴:

<dependencies>

<dependency>

<groupid>org.springframework.boot/<groupid>

<artifactid>spring-boot-starter-web/<artifactid>

再次運行mvn dependency:tree,你會看到額外新增了許多依賴項,如:Tomcat web server依賴 和Spring Boot 自身依賴.


4.3. 編寫代碼

要完成應用程序,我們還需要創建一個Java文件.默認,Maven會編譯src/main/java下的源碼文件,因此你需要創建這樣的目錄結構,然後再創建一個名為src/main/java/Example.java的文件,其代碼內容為:

import org.springframework.boot.*;

import org.springframework.boot.autoconfigure.*;

import org.springframework.web.bind.annotation.*;

@RestController

@EnableAutoConfiguration

public class

Example {

@RequestMapping("/")

String home() {

return "Hello World!";

}

public static void main(String[] args) {

SpringApplication.run(Example.class, args);

}

}

雖然這裡並沒有太多代碼,但在背後卻做了很多事情.我們將在接下來的幾節中逐步介紹重點部分。

4.3.1. @RestController和@RequestMapping註解

我們Example類上的第一個註解是@RestController. 這是一個stereotype註解.

該註解可為閱讀代碼的人提供提示.

在這裡,由於我們的類是一個web@Controller,因此Spring在處理傳入web請求時會考慮該控制器.

而@RequestMapping註解將用來提供路由信息。

它告知Spring:任何帶有/路徑的HTTP請求都將交由home方法來處理。

而@RestController註解則告知Spring:直接將結果字符串返回給調用者.

提示

@RestController和@RequestMapping註解是Spring MVC註解(它們不是Spring Boot中的專用註解). 參考Spring參考文檔中的MVC章節來了解詳細信息.


4.3.2. @EnableAutoConfiguration註解

第二個類級註解是@EnableAutoConfiguration.

這個註解告訴Spring Boot:根據所添加的jar依賴來“猜測”Spring配置的方式。

由於spring-boot-starter-web添加了Tomcat和Spring MVC,因此自動配置(auto-configuration)會假設您正在開發Web應用程序並做相應的Spring設置。

Starters和Auto-configuration

自動配置旨在與“Starters”協同工作,但兩者在概念上並沒有直接聯繫.

你可以自由選擇starters之外的jar依賴. Spring Boot仍會盡最大努力來自動配置您的應用程序.

4.3.3. “main”方法

我們應用程序的最後一部分是main方法。它只是一個遵循Java約定的標準應用程序入口方法.

我們的main方法會通過調用run來委派給Spring Boot的SpringApplication類.

SpringApplication會引導我們的應用程序啟動Spring,後者反過來又會啟動自動配置的Tomcat Web服務器。

我們需要將Example.class作為參數傳遞給run方法,以告訴SpringApplication哪個是主要的Spring組件。 args數組可通過命令行參數來傳遞。

4.4. 運行示例

此時,您的應用程序應該可以工作了。

由於您使用了spring-boot-starter-parent POM,因此您可通過run goal來來啟動應用程序。

在根項目目錄鍵入spring-boot:run來啟動應用程序後,您應該能看到如下類似輸出:

$ mvn spring-boot:run

:: Spring Boot :: (v2.2.5.RELEASE)

....... . . . ....... . . . (log output here)

....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)

如果在瀏覽器中打開localhost:8080, 那麼可以看到如下輸出:

Hello World!

要優雅地退出應用程序,可按ctrl-c.

4.5. 創建可執行Jar

下面將創建一個可在生產環境中運行且完全自包含的可執行jar來結束我們的示例.

可執行jars(有時也稱為“fat jars”)是包含你的編譯類及其所有依賴的歸檔文件.

Executable jars和Java

Java並沒有提供標準的方法來加載內嵌jar文件(即包含jar內的jar文件).

因此,當您分發自包含應用程序時可能會出現問題.

為解決這個問題,許多開發者都使用“uber” jars. uber jar會將所有依賴的類打包包單個歸檔文件.

這種方案的問題在於:很難查看應用程序中包含哪些庫。

如果多個jar中含有相同文件名(但文件具有不同的內容),也可能會產生問題。

Spring Boot則採用了不同方案,該方案允許您直接嵌套jar.

要創建可執行jar,我們需要將spring-boot-maven-plugin添加到我們的pom.xml中。

為此,請在“ dependencies”部分下面插入以下行:

<build>

<plugins>

<plugin>

<groupid>org.springframework.boot/<groupid>

<artifactid>spring-boot-maven-plugin/<artifactid>

提示

spring-boot-starter-parent POM含有<executions>配置來綁定repackage goal./<executions>

若不使用parent POM,那麼你必須自己聲明該配置.參考plugin documentation來了解詳情.


保存你的pom.xml,並在命令行中執行mvn package,如下所示:

$ mvn package

[INFO] Scanning for projects...

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] Building myproject 0.0.1-SNAPSHOT

[INFO] ------------------------------------------------------------------------

[INFO] .... ..

[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---

[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar

[INFO]

[INFO] --- spring-boot-maven-plugin:2.2.5.RELEASE:repackage (default) @ myproject ---

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

如果你查看target目錄 ,你會看到myproject-0.0.1-SNAPSHOT.jar. 該文件大約有10 MB.

如果想窺視jar的內部,則可以用jar tvf,如下所示:

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

此外,在target目錄下你還可以看到一個較小的文件:myproject-0.0.1-SNAPSHOT.jar.original.

這是Maven在Spring Boot重新打包之前創建的原始jar文件。

要運行該應用程序,請使用java -jar命令,如下所示:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar

:: Spring Boot :: (v2.2.5.RELEASE)

....... . . .

....... . . . (log output here)

....... . . .

........ Started Example in 2.536 seconds (JVM running for 2.864)

像之前一樣,要退出應用程序,可按ctrl+c.

5. 接下來讀什麼

希望本節提供的一些Spring Boot基礎知識能幫助你編寫自己的應用程序.

如果您是面向任務的開發人員,你可以跳到spring.io來查看如何使用Spring來解決相關問題的getting started指南. 此外,我們還提供了Spring Boot特有的“How-to”參考文檔.

對於其它情況,則可以閱讀using-spring-boot.html.

如果很著急,也可直接閱讀Spring Boot features文檔.

原文鏈接

https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/html/getting-started.html#getting-started


分享到:


相關文章: