第3章 Spring Boot 入門指南

Part II. 入門指南

若是你剛剛開始使用Spring Boot,這是你的一部份內容! 在這裏咱們將會回答一些基本的「what?」, 「how?」 和 「why?」的問題。 在這裏你會找到一個詳細的Spring Boot介紹和安裝說明。 而後,咱們將構建咱們的第一個Spring Boot應用程序,並討論一些核心原則。html

8. Spring Boot 介紹

Spring Boot能夠基於Spring輕鬆建立能夠「運行」的、獨立的、生產級的應用程序。 對Spring平臺和第三方類庫咱們有本身見解和意見(約定大於配置),因此你最開始的時候不要感到奇怪。大多數Spring Boot應用程序須要不多的Spring配置。java

您可使用Spring Boot建立可使用java -jar或傳統 war 包部署啓動的Java應用程序。 咱們還提供一個運行「spring scripts」的命令行工具。git

咱們的主要目標是:程序員

  • 爲全部的Spring開發者提供一個更快,更普遍接受的入門體驗。
  • 開始使用開箱即用的配置(極少配置甚至不用配置),但隨着需求開始配置本身所須要的值(即全部配置都有默認值,同時也能夠根據本身的需求進行配置)。
  • 提供大量項目中常見的一系列非功能特徵(例如嵌入式服務器,安全性,指標,運行情況檢查,外部化配置)。
  • 絕對沒有代碼生成,也不須要XML配置。

9. 系統要求

默認狀況下,Spring Boot 1.5.2.RELEASE須要Java 7和Spring Framework 4.3.7.RELEASE或更高版本。 您能夠進行一些其餘配置在Java 6上使用Spring Boot。 有關詳細信息,請參見第84.11節「如何使用Java 6」。 爲Maven(3.2+)、Gradle 2(2.9或更高版本)和3提供了顯式構建支持。github

雖然您能夠在Java 6或7上使用 Spring Boot,但咱們一般推薦Java 8。web

9.1 Servlet容器

如下嵌入式servlet容器能夠直接使用:spring

名稱 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+ 的容器中。shell

10. 安裝 Spring Boot

Spring Boot能夠與「經典(classic)」Java開發工具一塊兒使用或做爲命令行工具安裝。 不管如何,您將須要Java SDK v1.6或更高版本。 在開始以前檢查當前的Java安裝:apache

$ java -version

若是您是Java開發的新手,或者您只想嘗試一下 Spring Boot,您可能須要首先嚐試使用 Spring Boot CLI,若是想正式使用Spring Boot,請閱讀「經典(classic)」安裝說明。數組

雖然Spring Boot 與Java 1.6兼容,但咱們建議使用最新版本的Java。

10.1 針對Java開發程序員安裝說明

Spring Boot的使用方式與標準Java庫的使用相同,只需在類路徑中包含適當的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,能夠按照 https://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 項目繼承,並聲明一個或多個「啓動器(啓動器)」的依賴關係。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.2.RELEASE</version>
</parent>

<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

<!-- Package as an executable 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繼承,或者您可能不喜歡咱們的默認設置。 請參見第13.2.2節「使用不帶父POM的Spring Boot」做爲使用導入做用域(import scope)的替代解決方案。

10.1.2 Gradle 安裝

Spring Boot 兼容 Gradle 2(2.9或更高版本)和Gradle 3。若是您還沒有安裝Gradle,您能夠按照 http://www.gradle.org/ 上的說明進行操做。

可使用org.springframework.boot 組(group)聲明Spring Boot 的依賴項。 一般,您的項目將聲明一個或多個「啓動器(Starters)」的依賴。Spring Boot提供了一個有用的Gradle插件,可用於簡化依賴關係聲明和建立可執行 jar包。

Gradle Wrapper

當您須要構建項目時,Gradle Wrapper提供了一種「獲取(obtaining)」Gradle的更好的方式。 它是一個小腳本和庫,它與代碼一塊兒引導構建過程。 有關詳細信息,請參閱 https://docs.gradle.org/2.14.1/userguide/gradle_wrapper.html

典型的 build.gradle 文件:

plugins {
id 'org.springframework.boot' version '1.5.2.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快速原型(quickly prototype),可使用它。 它容許您運行Groovy腳本,這意味着會有您熟悉的相似Java的語法,沒有太多的樣板代碼(boilerplate code)。

您也沒必要要經過CLI來使用Spring Boot,但它絕對是開始Spring應用程序最快方法。

10.2.1 手動安裝

您能夠從Spring軟件版本庫下載Spring CLI發行版:

各發布版本的快照

下載完成後,請按照解壓縮後文件中的INSTALL.txt的說明進行操做。 總而言之:在.zip文件的bin/目錄中有一個spring腳本(Windows的spring.bat),或者你可使用java -jar(腳本能夠幫助您確保類路徑設置正確)。

10.2.2 使用SDKMAN!安裝

SDKMAN!(軟件開發套件管理器)可用於管理各類二進制SDK的多個版本,包括Groovy和Spring Boot CLI。從http://sdkman.io/ 獲取SDKMAN!並安裝Spring Boot。

$ sdk install springboot
$ spring --version
Spring Boot v1.5.2.RELEASE

若是您正在開發CLI的功能,並但願輕鬆訪問剛建立的版本,請遵循如下額外說明。

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-1.5.2.RELEASE-bin/spring-1.5.2.RELEASE/
$ sdk default springboot dev
$ spring --version
Spring CLI v1.5.2.RELEASE

這將安裝一個稱爲dev的spring的本地實例(instance)。 它指向您構建位置的target,因此每次重建(rebuild)Spring Boot時,Spring 將是最新的。

你能夠看到:

$ sdk ls springboot

================================================================================
Available Springboot Versions
================================================================================
> + dev
* 1.5.2.RELEASE

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

10.2.3 OSX Homebrew 安裝

若是您在Mac上使用 Homebrew,安裝Spring Boot CLI 只須要下面命令:

$ brew tap pivotal/tap
$ brew install springboot

Homebrew會將Spring 安裝到 /usr/local/bin。

若是您沒有看到公式(formula),您的安裝可能會過時。 只需執行brew更新,而後重試。

10.2.4 MacPorts安裝

若是您在Mac上使用 MacPorts,安裝Spring Boot CLI 只須要下面命令:

$ sudo port install spring-boot-cli

10.2.5 命令行提示

Spring Boot CLI爲BASH和zsh shell提供命令提示的功能。 您能夠在任何shell中引用腳本(也稱爲spring),或將其放在您的我的或系統範圍的bash完成初始化中。 在Debian系統上,系統範圍的腳本位於 /shell-completion/bash 中,當新的shell啓動時,該目錄中的全部腳本將被執行。 手動運行腳本,例如 若是您使用SDKMAN安裝了!

$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
grab help jar run test version

若是使用Homebrew或MacPorts安裝Spring Boot CLI,則命令行補全腳本將自動註冊到您的shell。

10.2.6 快速啓動Spring CLI示例

這是一個很是簡單的Web應用程序,可用於測試您的安裝是否正確。 建立一個名爲app.groovy的文件:

@RestController
class ThisWillActuallyRun {

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

}

而後從shell運行它:

$ spring run app.groovy

由於下載依賴的庫,首次運行應用程序須要一些時間,。 後續運行將會更快。

在瀏覽器中打開 http://localhost:8080 ,您應該會看到如下輸出:

Hello World!

10.3 從早期版本的Spring Boot升級

若是您從早期版本的 Spring Boot 升級,請檢查項目wiki上託管的「發行說明」。 您將找到升級說明以及每一個版本的「新的和值得注意的」功能的列表。

要升級現有的CLI安裝,請使用包管理工具相應的package manager命令(例如brew upgrade),若是您手動安裝了CLI,請按照標準說明記住更新PATH環境變量以刪除任何舊的引用。

11. 開發您的第一個Spring Boot應用程序

讓咱們在Java中開發一個簡單的「Hello World!」Web應用程序,突顯Spring Boot一些主要的功能。 咱們將使用Maven構建該項目,由於大多數IDE支持它。

https://spring.io/ 包含許多使用Spring Boot的「入門指南」。 若是您正在尋求解決一些具體問題; 能夠先看一下那裏。

您能夠在 https://start.spring.io/ 的依賴關係搜索器中選擇Web啓動器來快速完成如下步驟。
這會自動生成一個新的項目結構,方便您當即開始編碼。 查看文檔瞭解更多詳細信息

在開始以前,打開終端來檢查您是否安裝了有效的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

這個示例須要在其本身的文件夾中建立。 後面咱們假設您在當前目錄已經建立了一個正確的文件夾。

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.2.RELEASE</version>
</parent>

<!-- Additional lines to be added here... -->

</project>

這應該給你一個工做構建(working build),你能夠經過運行 mvn package 進行測試(你能夠暫時忽略警告:「jar will be empty - no content was marked for inclusion!」)。

如今,您能夠將項目導入到IDE中(最新的Java IDE內置對Maven的支持)。 爲了簡單起見,這個示例咱們繼續使用純文本編輯器。

11.2 添加類路徑依賴關係

Spring Boot提供了一些「啓動器(Starters)」,能夠方便地將jar添加到類路徑中。咱們的示例應用程序已經在POM的父部分使用了spring-boot-starter-parent。spring-boot-starter-parent是一個特殊啓動器,提供一些Maven的默認值。它還提供依賴管理 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>
</dependency>
</dependencies>

若是您再次運行 mvn dependency:tree ,您將看到如今有許多附加依賴關係,包括Tomcat Web服務器和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 註解

咱們的Example類的第一個註解是@RestController。 這被稱爲 stereotype annotation。它爲人們閱讀代碼提供了一些提示,對於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依賴關係來「猜(guess)」你將如何配置Spring。因爲spring-boot-starter-web添加了Tomcat和Spring MVC,自動配置將假定您正在開發Web應用程序並相應地配置Spring。

啓動器和自動配置

自動配置旨在與「起動器」配合使用,但兩個概念並不直接相關。 您能夠自由選擇啓動器以外的jar依賴項,Spring Boot仍然會自動配置您的應用程序。

11.3.3 「main」方法

咱們的應用程序的最後一部分是main()方法。 這只是一個遵循Java慣例的應用程序入口點的標準方法。 咱們的main()方法經過調用run()委託(delegates)給Spring Boot的SpringApplication類。 SpringApplication將引導咱們的應用程序,啓動Spring,而後啓動自動配置的Tomcat Web服務器。 咱們須要將Example.class做爲一個參數傳遞給run方法來告訴SpringApplication,它是主要的Spring組件。 還傳遞了args數組以傳遞命令行參數。

11.4 運行示例

因爲咱們使用了spring-boot-starter-parent POM,因此咱們有一個可用的運行目標,咱們可使用它來啓動應用程序。 鍵入mvn spring-boot:從根目錄運行以啓動應用程序:

$ mvn spring-boot:run

. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.2.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)

若是你用瀏覽器打開 http://localhost:8080 你應該看到如下輸出:

Hello World!

ctrl-c 正常(gracefully)退出應用程序。

11.5 建立可執行的jar

讓咱們完成咱們的例子,建立一個徹底自包含的可執行jar文件,咱們能夠在生產環境中運行。 可執行的jar(有時稱爲「fat jars」)是包含編譯的類以及代碼運行所須要的全部jar包依賴的歸檔(archives)。

可執行jar和Java

Java不提供任何標準的方法來加載嵌套的jar文件(即自己包含在jar中的jar文件)。 若是您正在尋找能夠發佈自包含的應用程序,這多是有問題的。
爲了解決這個問題,許多開發人員使用「uber」 jars。 一個uber jar簡單地將全部類、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>
</plugin>
</plugins>
</build>

spring-boot-starter-parent POM 包括從新打包目標的 executions標籤 配置。 若是您不使用該父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.2.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

若是你看看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.2.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

像以前同樣,ctrl+c正常退出應用程序。

12. 接下來應該讀什麼

但願本節能爲您提供一些Spring Boot基礎知識,並讓您準備編寫本身的應用程序。 若是你是一個面向具體任務的開發人員,你可能想跳過 https://spring.io/ ,看看一些解決具體的「如何用Spring」問題的入門指南; 咱們還有Spring Boot-specific How-to參考文檔。

Spring Boot庫還有一大堆能夠運行的示例。 示例與代碼的其他部分是獨立的(這樣您不須要構建多餘的代碼來運行或使用示例)。

下一個是第三部分「使用 Spring Boot」。 若是你真的沒有這個耐心,也能夠跳過去閱讀Spring Boot功能

相關文章
相關標籤/搜索