如果您是"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或以上版本.
它支持如下構建工具:
2.1. Servlet 容器
Spring Boot支持如下內嵌servlet容器:
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
提示
如果是通過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
閱讀更多 Java源 的文章