1. 程式人生 > >SpringBoot2.x參考指南(中文版) 第二部分 開始入門

SpringBoot2.x參考指南(中文版) 第二部分 開始入門

轉載請註明出處:http://blog.csdn.net/hitliuxiaodong/article/details/53259797
本人水平有限,翻譯中的錯誤還請多多指教
 如果你第一次使用SpringBoot或者剛接觸Spring,這部分就是為你準備噠。在這裡我們將回答:是什麼?為什麼?怎麼做?三個基本的問題。隨著SpringBoot的安裝,你將對SpringBoot有一個基本的印象。我們接下來將開始構建我們第一個SpringBoot專案,也會討論一下核心準則。
 
 8.SpringBoot的介紹
 
 SpringBoot使得構建可以直接執行的獨立、可釋出的Spring專案變得非常容易。我們將Spring庫和其他第三方庫整合進來,使你可以沒有很多疑惑的開始構建專案。大部分SpringBoot專案需要很少的Spring配置就夠了。
 你可以使用SpringBoot構建通過java -jar

執行的java專案,也可以構建相對傳統的war專案。我們也提供了一個命令列工具以便執行”Spring指令碼”
 我們的初級目標是:

  • 提供一個從根本上快速簡潔的Spring開發體驗
  • 提供諸多非必須的但是在大型的專案中很常見的功能(比如:整合的伺服器,安全等)
  • 無須生成程式碼和xml配置

    9.系統要求
    預設情況下,SpringBoot2.0.0.Build-SnapShot需要java7和SpringFramework5.0.0Build-Snapshot或者更高的版本。你也可以使用java6,不過需要一些額外的配置。請看第 Section 80.11。構建工具需要Maven(3.2+)或者Gradle2(2.9+)。Gradle3不提供支援。

    儘管你可以使用java6或者java7,不過我們還是建議你儘可能的使用java8

    9.1 Servlet容器
    下面的容器是SpringBoot內部整合的

Name ServletVersion Java version
Tomcat8 3.1 java7+
Tomcat7 3.0 java6+
Jetty9.3 3.1 java8+
Jetty9.2 3.1 java7+
Jetty8 3.1 java6+
Undertow 1.3 3.1 java7+

你也可以在任何支援Servlet 3.0+的容器中部署SpringBoot專案

10.安裝SpringBoot
SpringBoot可以使用傳統的Java開發工具或者命令列工具。但是無論如何你需要使用java1.6或者更高版本。你可以使用以下命令檢查java版本
$java -version
如果你是一枚Java開發新手,或者你只是想體驗一下SpringBoot,你可以嘗試使用 SpringBootCLI 工具,或者閱讀一下安裝指南。

儘管SpringBoot可以在java1.6上執行良好,如果可能的話還是要用Java的最新版本

10.SpringBoot安裝指南

你可以像使用傳統的Java庫一樣使用SpringBoot,也就是把sping-boot-*.jar放到你的classpath中。SpringBoot不需要額外的外掛整合,因此你可以使用任何IDE或者文字編輯器。另外SpringBoot專案和普通的java專案沒有什麼區別,因此你可以向執行除錯普通java專案一樣執行除錯SpringBoot專案。

儘管你可以只把jar包拷貝到構建路徑,不過我們還是強烈建議你使用構建工具(比如Maven或者Gradle)

10.1.1 Maven配置
SpringBoot可以和ApacheMaven3.2及以上版本正常工作。如果你沒有安裝Maven,可以參考 教程

在大多數作業系統上,可以通過包管理工具安裝Maven。如果你是 OSx系統,可以使用 brew install maven Ubuntu系統可以使用 sudo apt-get install maven

SpringBoot的依賴使用 org.springframework.boot groupId。一個典型的SpringBoot專案的pom需要繼承 spring-boot-starter-parent 依賴於 一個或者多個 “Starters”.SpringBoot也提供 Maven plugin 來建立可執行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>2.0.0.BUILD-SNAPSHOT</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>

    <!-- Add Spring repositories -->
    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>

使用SpringBoot的最好方法是 繼承 spring-boot-starter-parent,不過有時候並不合適。有時需要使用繼承自其他 父 pom ,或者不想使用預設的設定。這時候 請看下面 的教程

10.1.2 Gradle配置

SpringBoot相容Gradle2(2.9+).推薦 Gradle2.14.1,Gradle3是不支援的。如果你沒有安裝Gradle,請參照Gradle官方安裝教程www.gradle.org

SpringBoot的依賴需要用 org.springframework.boot groupId。你的專案可能需要宣告一個或者多個 “Starters”的依賴。SpringBoot也提供了一個外掛Gradle plugin供生成可執行的jar包

Gradle Wrapper
GradleWrapper提供一個很簡潔的方法來生成一個專案。它包含一些指令碼和一些庫以供啟動構建執行緒。詳情請見 https://docs.gradle.org/2.14.1/userguide/gradle_wrapper.html

下面是一個典型的 build.gradle 指令碼

buildscript {
    repositories {
        jcenter()
        maven { url "http://repo.spring.io/snapshot" }
        maven { url "http://repo.spring.io/milestone" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.0.BUILD-SNAPSHOT")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'

jar {
    baseName = 'myproject'
    version =  '0.0.1-SNAPSHOT'
}

repositories {
    jcenter()
    maven { url "http://repo.spring.io/snapshot" }
    maven { url "http://repo.spring.io/milestone" }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

10.2 安裝 SpringBootCLI 工具
SpringBootCLI是一個命令列工具,使用該工具可以快速體驗Spring的原型,它允許你執行 Groovy 指令碼,意味著你可以使用java相似的語法

你工作時無需使用 SpringBootCLI ,不過它定義了一種新的快速構建Spring專案的方法

10.2.1 安裝手冊

你可以從下面兩個分支下載 Sping-boot-cli

下載完成後,就可以按照壓縮包中的 INSTALL.txt 中的步驟進行安裝。

10.2.2 安裝 SDKMAN!
SDKMAN! (The Software Development Kit Manager) 可以用來管理多個 不同的 SDK,包括 Groovy 和 SpringBootCLI.可以從 sdkman.io 進行下載,然後執行下面的命令進行安裝

$ sdk install springboot
$ spring --version
Spring Boot v2.0.0.BUILD-SNAPSHOT

如果你想為CLI 增強功能,想更快的使用你編譯的版本,你可以使用如下的方法:

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.0.0.BUILD-SNAPSHOT-bin/spring-2.0.0.BUILD-SNAPSHOT/
$ sdk default springboot dev
$ spring --version
Spring CLI v2.0.0.BUILD-SNAPSHOT

這樣就會安裝一個叫做 dev 的例項,它指向你編譯的位置,這樣每次重新編譯SpringBoot,Spring都會是最新的。
你可以使用如下命令檢視

$ sdk ls springboot

================================================================================
Available Springboot Versions
================================================================================
> + dev
* 2.0.0.BUILD-SNAPSHOT

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

10.2.3 OSX Homebrew 安裝

如果你正在使用 MAC 並且在使用 Homebrew,那麼你執行如下命令就可以安裝SpringBootCLI:

$ brew tap pivotal/tap
$ brew install springboot

Homebrew就會把 spring 安裝到 usr/local/bin

如果你看不到這樣的提示,可能是你的brew不夠新,執行 brew update 進行更新,重試一下就好

10.2.4 MacPorts安裝
如果你正在使用mac,並且在使用 MacPorts,你只需要執行:

$ sudo port install spring-boot-cli

10.2.5 命令列自動補全

SpringBootCLI 為 BASH 和 zsh shells提供有自動補全功能。你可以在任何 shell中使用,或者把放在個人或者系統自動補全字典裡。在Debian系統裡,system-wide scripts(這個我不太知道是什麼意思)在 /shell-completion/bash,這裡的指令碼在新的shelli啟動時都會執行。如果想手動執行,可以使用 SDKMAN!

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

如果你在使用Homebrew 或者 MacPorts,那麼SpringBootCLI就會自動和Shell繫結。

10.2.6 一個SpringCLI的例子

下面是一個非常簡單的Web專案,你可用它來測試是否安裝成功。建立一個名稱為 app.groovy 的檔案:

@RestController
class ThisWillActuallyRun {

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

}

然後通過shell執行:

$ spring run app.groovy

第一次執行可能會慢一點,因為需要下載相關的依賴庫,下次就快了

在瀏覽器中 輸入 localhost:8080 你就可以看到:

Hello World!

10.3 從早期版本升級

如果你想從早期版本進行升級,請檢視 project wiki 中的 “release notes”.你將在那裡看到相關的升級指南

如果你想升級早期的 CLI工具,可以使用上面的包管理工具(比如:brew upgrade)。如果是手動安裝的,請參照 指南 進行升級,記得更改環境變數。

11.開發第一個SpringBoot專案

讓我們通過一個簡單的 “hello world” 專案來看看 SpringBoot的一些動人的特點。我們將使用Maven來構建,因為大多數IDE都支援Maven。
在開始之前,請開啟一個終端,確保我們有正確的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.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>2.0.0.BUILD-SNAPSHOT</version>
    </parent>

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

    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>

然後執行 mvn package ,可以忽略”jar will be empty - no content was marked for inclusion!”的提示

此時你可以把它匯入你的常用IDE中。為了簡單,我們還用文字編輯器

11.2 新增classpath依賴
SpringBoot提供有許多的 “Starters” 來使構建變得簡單。我們的例子已經在POM的 parent 中使用了
spring-boot-starter-parent 。這個 spring-boot-starter-parent 是一個特殊的 starter 提供有maven的預設配置。它也提供有 dependency-management 模組 來省略 version 標籤

其他的 “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伺服器和SpringBoot自身的依賴。

11.3寫程式碼
為了完成我們的專案,我們還需要建立一個java file。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 註釋
我們例子中的第一個註釋是 @RestController。這個註釋在Spring中有特殊的涵義,意味著這是一個控制器,因此Spring會用它來處理web請求。
@RequestMapping 這個註釋提供有路由資訊。它告訴Spring 凡是請求路徑為 “/”的Http請求都應該由 home 方法來處理。同時這個註釋也告訴Spring 直接渲染結果的 string 給呼叫者。

@RestController和@RequestMapping是SpringMVC中的註釋。可以通過 MVC section來了解更多資訊

11.3.2 @EnableAutoConfiguration 註釋
第二個類級別的註釋是 @EnableAutoConfiguration。這個註釋告訴SpringBoot去猜測你想如何配置Spring,主要根據你新增的jar包。因為 spring-boot-starter-web新增有tomcat和SpringMVC,所以SpringBoot會認為你在開發一個web專案,並以此進行配置。

Starters and Auto-Configuration
Auto-Configuration設計用來更好的和 "Starters" 協同工作。不過這兩個概念並不直接相連。你可以自由選擇jar包依賴,並且spring-boot仍然會很好的自動配置你的專案。

11.3.3 “main” 方法
最後的部分是應用的main方法。這是標準的java程式入口方法。我們的主方法委託給SpringBoot的SpringApplication類的run方法。SpringApplication會啟動我們的程式,啟動自動配置的tomcat。我們需要把Example.class作為引數傳遞給SpringApplication。

11.4 執行例項

這時候我們的程式就可以工作了。因為我們配置了 spring-boot-starter-parent POM,我們就可以執行我們的程式了。在控制檯輸入 mvn spring-boot:run 來啟動應用程式

$ mvn spring-boot:run

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.0.0.BUILD-SNAPSHOT)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)

此時我們就可以在瀏覽器中輸入 localhost:8080 看到相關輸出:

Hello World!

可以通過 ctrl+c 實現優雅退出程式

11.5 生成可執行jar檔案
最後讓我們通過生成可執行jar包來結束例子。可執行jar包中包含執行所需的所有類和依賴。

可執行jar包和java
java 本身沒有提供一個標準的方法生成可執行jar。這會在我們分發應用時造成問題。

為了解決這個問題,許多開發者使用 “uber” jars。“uber” jars只是把生成的類簡單的打成一個壓縮包。這樣的問題是沒法看到程式中應用了哪些類。這樣還有一個問題,就是多個相同的檔名的檔案(內容不同)被使用了

SpringBoot採用不同的方法允許你直接打包

為了建立一個可執行的 jar 包,我們需要在 pom檔案中新增 spring-boot-maven-plugin。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

spring-boot-starter-parent POM 包含 配置 來繫結打包。如果你沒有使用給定的父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:2.0.0.BUILD-SNAPSHOT:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

如果你看 target目錄 你就可以看到 myproject-0.0.1-SNAPSHOT.jar檔案。這個檔案大約10M。如果你想看檔案內部,你就可以使用 jar tvf:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
你也可以在target裡看到一個相對小很多的檔案,檔名為 myproject-0.0.1-SNAPSHOT.jar.original。這個原始檔案是由SpringBoot打包前,由maven建立的。
為了執行該應用,可以使用 java -jar命令:

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

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.0.0.BUILD-SNAPSHOT)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

最後,可以通過ctrl+c 優雅退出

12.接下來
本部分提供了一些SpringBoot的基礎知識,也帶領你開始寫自己的程式。如果你是一個任務驅動型的開發者,你也許想跳到 http://spring.io 看看”Spring 能夠做什麼的問題 “’ 我們也提供有 SpringBoot How-to 的參考文件

另外,接下來的步驟是閱讀 第三部分 使用 SpringBoot.如果你實在沒有耐心,你也可以調到前面閱讀 Spring特點一章。