- 檢視本文英文文件,請點選 me!
- 本文將在對原英文文件進行翻譯的基礎上,結合作者動手實踐一步步圖文並茂展示給大家!
- 小弟學識尚淺,若文章有不對的地方,請幫小弟指出,非常感謝!
第二部分 Spring Boot 入門
- 如果你正準備入門 Spring Boot,或者通常說是‘Spring’,那這章節將是你學習的好材料。本章節將回答諸如 Spring Boot 是什麼?怎麼做?為什麼?等基本問題。你將會得到一個優雅的、關於 Spring Boot 的介紹說明以及安裝文件。緊接著我們將一起構建我們的第一個 Spring Boot 應用程式並討論一些核心的原則。
8、介紹 Spring Boot
- Spring Boot 使你可以輕鬆地建立一個僅僅執行 java run(main方法) 的獨立的、生產級的基於 Spring 的應用程式。我們對Spring平臺和第三方庫有自己的看法,所以你可以從最小的錯誤代價開始學習 Spring Boot。 大多數 Spring Boot 應用程式只需要很少的Spring配置。
- 你可以使用 Spring Boot 建立一個使用
java -jar
執行的 Java 應用程式或者傳統的 war 包。我們還提供了一個執行 “spring scripts” 的命令列工具。 - 我們的主要目標是:
- 為所有Spring開發提供一個更快,更廣泛的入門體驗。
- 開箱即用,但隨著需求開始偏離預設設定,快速退出(也就是自己做些其他配置)。
- 提供大量廣泛使用的非功能特性(如嵌入式伺服器,安全、指標、執行狀態檢查、外部配置等)
- 沒有程式碼生成也不需要xml配置
9、系統要求
- 預設情況下,Spring Boot 1.5.9.RELEASE需要 Java 7 和Spring Framework 4.3.13.RELEASE或更高版本。 您可以使用帶有Java 6的Spring Boot以及其他一些配置。 有關更多詳細資訊,請參見 Section 84.11, “How to use Java 6"。 為Maven(3.2+)和Gradle 2(2.9或更高版本)和3提供了明確的構建支援。
雖然可以使用Java 6或7的構建Spring Boot,但是我們通常推薦使用Java 8。
9.1 Servlet 容器
以下嵌入式servlet容器是開箱即用的:
名稱 | Servlet版本 | Java版本 |
---|---|---|
Tomcat 8 | 3.1 | Java 7+ |
Tomcat 7 | 3.0 | Java 6+ |
Jetty 9.3 | 3.1 | Java 8+ |
Jetty 9.2 | 3.1 | Java 7+ |
Jetty 8 | 3.0 | Java 6+ |
Undertow 1.3 | 3.1 | Java 7+ |
- 您也可以將Spring Boot應用程式部署到任何與Servlet 3.0+相容的容器。
10、安裝 Spring Boot
-
Spring Boot可以與“經典”Java開發工具一起使用,也可以作為命令列工具安裝。無論如何,您將需要Java SDK v1.6或更高版本。 在開始之前,您應該檢查您當前的Java安裝版本:
java -version
-
如果您對Java開發不熟悉,或者您只是想嘗試 Spring Boot,則可能需要先嚐試 Spring Boot CLI,否則請閱讀'經典'安裝說明。
儘管Spring Boot與Java 1.6相容,但如果可能的話,應該考慮使用最新版本的Java。
10.1、給Java開發人員的安裝說明
- 您可以像使用任何標準Java庫一樣使用Spring Boot。你只需在你的類路徑中包含相應的spring-boot-*.jar檔案即可。Spring Boot不需要任何特殊的工具整合,所以你可以使用任何IDE或文字編輯器; Spring Boot應用程式沒有什麼特別之處,所以您可以像執行其他任何Java程式一樣執行和除錯。
- 儘管您可以拷貝Spring Boot jar包到你自己的專案中,但我們通常建議您使用支援依賴管理的構建工具(如Maven或Gradle)。
10.1.1 Maven 安裝
- Spring Boot與Apache Maven 3.2或更高版本相容。 如果您還沒有安裝Maven,您可以按照maven.apache.org上的說明進行操作。
在許多作業系統上,Maven可以通過包管理器來安裝。 如果您是OSX Homebrew使用者,請嘗試
brew install maven
。 Ubuntu使用者可以執行sudo apt-get install maven
。
- Spring Boot 依賴使用
org.springframework.boot
作為groupId
,通常,您的Maven POM檔案將從spring-boot-starter-parent
專案繼承,並將依賴項宣告為一個或多個“啟動器Starters
”。Spring Boot還提供了一個可選的Maven外掛來建立可執行的jar檔案。 - 這是一個典型的
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>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- Inherit defaults from Spring Boot -->
<parent><!-- 表示從父專案中繼承 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId><!-- web支援 -->
</dependency>
</dependencies>
<!-- Package as an executable jar 打包成可執行jar檔案 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
複製程式碼
繼承
Spring-Boot-starter-parent
專案是使用Spring Boot的一個好方法,但它可能並不適合所有的情況。有時您可能需要從不同的父POM檔案中繼承,或者您可能不喜歡我們的預設設定。有關使用import
範圍的替代解決方案,請參見Section 13.2.2, “Using Spring Boot without the parent POM”
10.1.2、Gradle安裝
- Spring Boot與Gradle 2(2.9或更高版本)和Gradle 3相容。如果您尚未安裝Gradle,則可以按照www.gradle.org/上的說明進行操作。
- Spring Boot 依賴可以使用
org.springframework.boot
group
進行宣告。通常,您的專案將宣告依賴關係到一個或多個Starters
。 Spring Boot提供了一個有用的Gradle外掛,可以用來簡化依賴宣告和建立可執行的jar。Gradle Wrapper
Gradle Wrapper提供了一種在需要構建專案時“獲取”Gradle的好方法。 這是一個小指令碼和庫,與程式碼一起提交以引導構建過程。 有關詳細資訊,請參閱docs.gradle.org/2.14.1/user…。
- 這是一個典型的build.gradle檔案:
plugins { id 'org.springframework.boot' version '1.5.9.RELEASE' id 'java' } jar { baseName = 'myproject' version = '0.0.1-SNAPSHOT' } repositories { jcenter() } dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") } 複製程式碼
10.2、安裝 Spring Boot CLI
- Spring Boot CLI是一個命令列工具,如果你想用Spring來快速建立原型,可以使用它。它允許你執行Groovy指令碼,這意味著你有一個熟悉的類Java語法,沒有太多的樣板程式碼。
- 您可以不需要使用CLI來使用Spring Boot,但它絕對是建立Spring應用程式的最快捷方式。
10.2.1、手動安裝
- 您可以從Spring軟體倉庫中下載Spring CLI發行版:
- 最前沿的snapshot distributions也是可用的。
- 下載之後,請按照解壓縮歸檔中的 INSTALL.txt 說明進行操作。 總結:在.zip檔案的bin /目錄下有一個spring指令碼(適用於Windows的spring.bat),或者可以使用帶有.jar檔案的java -jar(該指令碼可以幫助您確定類路徑是否設定正確)。
10.3、從早期版本的Spring Boot升級(即Spring Boot 版本的升級)
- 如果您是從早期版本的Spring Boot進行升級,請檢視
project wiki
上託管的“release notes”。 您會發現升級說明以及每個版本的‘新增加、值得注意’的特性列表。 - 要升級現有的CLI安裝,請使用相應的package manager命令(例如
brew upgrade
),或者如果您手動安裝了CLI,請按照standard instructions記住更新PATH
環境變數以刪除所有舊的引用。
11、開發我們的第一個 Spring Boot 應用程式
- 我們用Java開發一個簡單的“Hello World!”Web應用程式,重點介紹Spring Boot的一些關鍵特性。 我們將使用Maven來構建這個專案,因為大多數IDE都支援它。
spring.io網站包含許多使用Spring Boot的“入門指南”。 如果你想解決一個特定的問題, 先在那裡檢查。 您可以通過轉到start.spring.io並從依賴關係搜尋器中選擇
Web
starter來快速執行以下步驟。 這將自動生成一個新的專案結構,以便您可以立即開始編碼。 檢查文件以獲取更多詳細資訊。 - 在我們開始之前,請開啟命令終端,檢查是否安裝了Java和Maven的有效版本。
$ java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) 複製程式碼
$ mvn -v Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00) Maven home: /Users/user/tools/apache-maven-3.1.1 Java version: 1.7.0_51, vendor: Oracle Corporation 複製程式碼
此示例需要在其自己的資料夾中建立。 後續的說明假定你已經建立了一個合適的檔案目錄(其實就是標準的
maven
,我們也可以通過start.spring.io自動生成專案目錄,小編接下來會截圖給大家看),並且保證命令列終端是你的“當前目錄”(也就是專案根目錄,小編是在boot
目錄下)。 - 小編的目錄結構如下:
- boot - src - main - java - Example.java - test - java - pom.xml 複製程式碼
11.1、建立POM檔案
- 我們需要從建立一個Maven
pom.xml
檔案開始。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>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>1.5.9.RELEASE</version> </parent> <!-- Additional lines to be added here... --> </project> 複製程式碼
- 你可以通過執行
mvn package
來測試構建是否正確,但注意目前所打包出來是空的包,你可以忽略譬如“jar will be empty - no content was marked for inclusion!”的警告。此時,您可以將專案匯入IDE(大多數現代Java IDE包含對Maven的內建支援)。 為了簡單起見,我們將繼續在這個例子中使用純文字編輯器。
11.2、新增classpath依賴關係
- Spring Boot提供了許多
starters
,我們可以很方便地將jar新增到你的classpath中。 我們的示例應用程式已經在POM的父節點中使用了spring-boot-starter-parent
。spring-boot-starter-parent
是一個特別的starter
,提供了有用的Maven預設值。 它還提供了一個dependency-management 功能,以便您可以省略version
標記以獲得“blessed(好的意思吧!)”的依賴關係。 - 其他“starter”只是提供開發特定型別的應用程式(比如web嘛!)時可能需要的依賴關係。由於我們正在開發一個Web應用程式,我們將新增一個
spring-boot-starter-web
依賴項,但在此之前,我們來看看我們目前擁有的。$ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT 複製程式碼
mvn dependency:tree
命令列印專案依賴項的樹形表示。 你可以看到spring-boot-starter-parent本身不提供依賴關係。(也就是父專案不提供其他如web的依賴,也不管理依賴,web依賴需要我們在自己的子專案POM
檔案中新增) 讓我們編輯我們的pom.xml,並在父節的下面新增spring-boot-starter-web
依賴項:<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> 複製程式碼
- 如果你再次執行
mvn dependency:tree
命令,你會發現多出了很多的依賴項,其中就包括內嵌的 Tomcat伺服器和Spring Boot本身。
11.3、開始寫程式碼
- 為了完成我們的應用程式,我們需要建立一個Java檔案。 Maven預設會從
src / main / java
編譯原始碼,所以你需要建立這個資料夾結構,然後新增一個名為src / main / java / Example.java
的檔案:import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.stereotype.*; import org.springframework.web.bind.annotation.*; @RestController @EnableAutoConfiguration public class Example { @RequestMapping("/") String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(Example.class, args); } } 複製程式碼
- 雖然這裡沒有太多的程式碼,但還是有很多。 我們來看看重要的部分。
11.3.1 @RestController
和@RequestMapping
註解
- 在我們的
class
中,第一個註解就是@RestController
。這是一個stereotype(好像是API中的一個包名)
註解。這個註解給閱讀這個class
程式碼的開發人員一種提示(簡單地講就是表明這個類是什麼),但對於 Spring 來說,它表明該類扮演者一個重要的角色。在我們的例子中,它表明我們的類是一個web@Controller
,所以Spring在處理傳入的Web請求時會考慮它。 - @RequestMapping註釋提供了“路由”資訊。 它告訴Spring,任何具有路徑“/”的HTTP請求都應該對映到home方法。 @RestController註釋告訴Spring將結果字串直接返回給呼叫者。
@RestController
和@RequestMapping
註解是Spring MVC註釋(它們不是Spring Boot特有的)。 有關更多詳細資訊,請參閱Spring參考資料中的MVC部分。
11.3.2、@EnableAutoConfiguration
註解
- 第二個類級別的註解是
@EnableAutoConfiguration
。 這個註解告訴Spring Boot根據你新增的jar依賴來“猜測”你將如何配置Spring。 由於spring-boot-starter-web
新增了Tomcat和Spring MVC,所以自動配置會假定你正在開發一個Web應用程式並相應地配置Spring。> Starters and Auto-Configuration
- 自動配置旨在與
starters
配合使用,但這兩個概念並不直接相關。 您可以自由選擇和選擇starter
之外的jar依賴項,並且Spring Boot將盡其所能地自動配置到您的應用程式當中。
11.3.3、main 方法
- 我們的應用程式的最後一部分是
main
方法。這只是一個遵循Java約定的應用程式入口點的標準方法。 我們的main
方法通過呼叫run來委託Spring Boot的SpringApplication
類。SpringApplication
將引導我們的應用程式,開啟Spring並繼而轉向啟動自動配置的Tomcat Web
伺服器。 我們需要將Example.class
作為引數傳遞給run
方法,以告知SpringApplication
是Spring的主要元件。args
陣列也被傳遞以暴露任何命令列引數。
11.4、執行我們的應用程式
- 到這裡我們的應用程式應該是可以執行了。由於我們使用了
spring-boot-starter-parent POM
,所以我們知道怎樣找到程式執行的入口(main方法
),所以我們可以使用它來啟動應用程式。$ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514) 複製程式碼
- 如果你開啟一個web瀏覽器到localhost:8080你應該看到下面的輸出:
Hello World! 複製程式碼
- 要正常退出應用,按住鍵盤
ctrl+c
即可。
11.5、建立一個可執行的 jar 檔案
-
讓我們通過建立一個完全獨立的可執行jar檔案來完成我們的例子,我們可以在生產環境中執行它。 可執行jar(有時也稱為“fat jars”)是包含您編譯的類以及您的程式碼需要執行的所有jar依賴項的歸檔檔案。
可執行的 jars and Java
Java不提供任何標準的方式來載入巢狀的jar檔案(即jar檔案本身包含在jar中)。 如果您正在分發自包含的應用程式,這可能會有問題。 為解決這個問題,很多開發者開發瞭如
uber jars
.一個uber jar
將來自不同jar
包的類打包成一個可釋出的archive
。這種方法的問題在於,很難在應用程式中看到專案實際使用的庫。 如果在多個jar
中使用相同的檔名(但具有不同的內容,即不同jar
種類名有可能相同嘛!),則也可能是有問題的。 Spring Boot採用了不同的方法,可以直接嵌入jar
。 -
要建立一個可執行的jar檔案,我們需要將
spring-boot-maven-plugin
新增到我們的pom.xml
中。 在依賴關係部分下面插入以下幾行:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 複製程式碼
spring-boot-starter-parent POM
中包含<executions>
配置來繫結repackage
目標。 如果您不使用父POM
,則需要自行宣告此配置。 有關詳細資訊,請參閱外掛文件。 -
儲存你的
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:1.5.9.RELEASE:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ 複製程式碼
-
如果您檢視
target
(注:在專案目錄下會生成一個target目錄)目錄,則應該看到myproject-0.0.1-SNAPSHOT.jar
。 該檔案大小應該在10 MB左右。 如果你想偷看裡面到底是什麼東西,你可以使用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 :: (v1.5.9.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.536 seconds (JVM running for 2.864) 複製程式碼
-
像以前一樣,要優雅地退出應用程式點選
ctrl-c
。
12、接下來要讀什麼?
- 希望本節為您提供了一些Spring Boot的基礎知識,並幫助您編寫自己的應用程式。 如果您是面向任務的開發人員,則可能需要跳至spring.io,並檢視一些入門指南,以解決具體的“如何使用Spring”問題; 我們也有Spring Boot特定的How - to指南文件。
- Spring Boot版本庫也有一些你可以執行的例子。 例子獨立於程式碼的其餘部分(也就是說,您不需要構建其餘的程式碼來執行或使用例子)。
- 否則,下一個邏輯步驟是閱讀第三部分“使用Spring Boot”。 如果你真的不耐煩,也可以跳過來閱讀Spring Boot的特性。