1. 程式人生 > >spring boot參考文件——PartI和PartII

spring boot參考文件——PartI和PartII

Part I. Spring Boot參考文件
    本小節是對Spring Boot參考文件的概述. 是文件其餘部分的對映.

    1. 關於本參考文件
        本參考文件支援的檔案格式有:
        HTML
        PDF
        EPUB
        最新版本路徑:docs.spring.io/spring-boot/docs/current/reference.

        本文件免費,並且沒有任何使用限制。

    2. 獲取幫助
        如果你在使用spring boot時遇到困難,可以通過以下方式獲取幫助:

        參考How-to文件。它提供了大多數常見問題的解決方案。
        學習Spring基礎文件。spring boot建立在其他spring專案之上。訪問spring.io網站可以獲取到大量參考文件。如果你是初學者,可以選擇其中一個作為入門引導。
        問問題。有什麼問題可以在stackoverflow.com上提出,但是要加上spring-boot標籤。
        可以在github.com/spring-projects/spring-boot/issues上報告spring boot的bug。
        
        [注意]
            spring boot及其文件都是開源的,如果你在文件中發現問題或你想要改進他們,請參與進來。
        

    3. 第一步
        如果你以正常的方式來開啟學習spring boot或spring,請從以下步驟開始:

        從頭開始: 概述 | 要求 | 安裝
        輔導教程: Part 1 | Part 2
        執行你的示例: Part 1 | Part 2
    4. 使用Spring Boot
        準備好開始使用Spring Boot了嗎? 我們已經為你安排好了:

        建立系統: Maven | Gradle | Ant | Starters
        最佳實踐: Code Structure | @Configuration | @EnableAutoConfiguration | Beans and Dependency Injection
        執行你的程式碼: IDE | Packaged | Maven | Gradle
        打包你的應用: 生產jars
        Spring Boot命令列介面: 使用命令列介面
    5. 學習Spring Boot的特性
        需要了解更多Spring Boot核心特性的細節? 請參考以下內容:

        核心特性: SpringApplication | External Configuration | Profiles | Logging
        Web應用: MVC | Embedded Containers
        資料操作: SQL | NO-SQL
        訊息機制: Overview | JMS
        測試: Overview | Boot Applications | Utils
        擴充套件: Auto-configuration | @Conditions
    6. 生產
        當你要將你的spring boot應用放到生產中,這裡有一些訣竅你或許喜歡:

        管理終端: Overview | Customization
        連線選項: HTTP | JMX
        監控: Metrics | Auditing | Tracing | Process
    7. 高階主題
        最後,我們有一些話題是為高階使用者準備的:

        Spring Boot應用部署: Cloud Deployment | OS Service
        構建工具外掛: Maven | Gradle
        附錄: Application Properties | Auto-configuration classes | Executable Jars
        
----------------------------------------------------------------------------------------------------------
Part II. 啟動
    如果你打算用正常的方式開始spring boot或spring,從本節開始。本節解答 “什麼?”, “怎麼?” 和 “為什麼?” 這三個問題。包括對spring boot
    的介紹,和安裝過程的描述。然後你就可以建立自己的第一個spring boot應用並和我們一起討論一些spring boot的核心原理了。

    8. 介紹Spring Boot
        spring boot使得你可以很容易的建立一個可執行的獨立的生產級的基於spring的應用。我們對於spring平臺和第三方庫有自己的規劃,這樣可以
        使你輕鬆的啟動。大多數的spring boot應用只需要很少的spring配置。
        
        你可以使用spring boot建立使用java -jar或更傳統的war部署啟動的java應用。我們也提供了命令列工具執行“spring 指令碼”。
        
        我們的主要目標是:

        我們為所有spring 開發提供了一個極端快速和易理解的開發體驗。開箱即用,但是當需求開始偏離預設時要及時退出。我們提供了一些大型別專案通用
        的非功能特性(例如嵌入式伺服器,安全,metric監控,健康檢測,和外部化配置)。完全不需要生成程式碼也不需要任何XML配置。
        
    9. 系統要求
        要求Spring Boot 2.0.3.RELEASE,Java 8或9,以及Spring Framework 5.0.7.RELEASE或以上。Maven 3.2+和Gradle 4

        9.1 Servlet容器
            Spring Boot支援一下嵌入式servlet容器:

            名稱      Servlet版本
            Tomcat    8.5

            Jetty     9.4

            Undertow  1.4

            你也可以將spring boot部署到任何相容Servlet 3.1+的容器中。

    10. 安裝Spring Boot
        spring boot可以使用經典的java工具安裝也可以通過命令列工具來安裝。無論哪種方式,都需要java SDK v1.8及以上。開始之前你需要使用以下
        命令檢查java版本:
            $ java -version
        如果你是一個java開發的新手或者你想用spring boot做實驗,你可以首先嚐試一下spring boot命令列。不然,也可以繼續閱讀經典安裝方式
        的介紹。
        
        10.1 安裝指南
            你可以像使用其他java標準庫一樣使用spring boot。這樣做,你的類路徑的會包含適當的spring-boot-*.jar檔案。spring boot不需要任何
            特殊的整合工具,你可以使用任何的IDE或文字編輯器。同樣,spring boot應用也沒有任何特殊的地方,你可以像其他java程式一樣執行和
            除錯spring boot應用。
            
            相對於拷貝spring boot的jar包,我們強烈建議您使用支援依賴管理的構建工具來導包(例如maven或gradle);

            10.1.1 Maven安裝
                spring boot需要Apache Maven 3.2或以上。如果你還沒有安裝maven,你可以參考maven.apache.org上的說明。

                [小竅門]
                    在許多的作業系統中,maven可以通過包管理器來安裝。如果你使用OSX Homebrew,可以嘗試使用brew安裝maven。ubuntu使用者可以
                    執行sudo apt-get install maven。使用Chocolatey的windows使用者可以執行choco 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>2.0.3.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節,13.2.2,“使用沒有父POM的Spring Boot”。通過匯入域來替代。

            10.1.2 Gradle安裝
                spring boot相容Gradle 4。如果你還沒有安裝Gradle,你可以在gradle.org檢視安裝說明。
                
                可以使用org.springframework.boot group宣告spring boot依賴。你的專案可以宣告一個或多個“Starters”。spring boot提供了
                一個有用的Gradle外掛可以去進行簡單的依賴宣告和建立可執行jar。

                Gradle Wrapper
                
                Gradle Wrapper在你需要建立專案時提供了一種很好的獲取Gradle的方式。你只需要在你的程式碼旁邊提交很小的指令碼和庫來輔助建立
                過程。參考docs.gradle.org/4.2.1/userguide/gradle_wrapper.html檢視詳細內容。

                以下展示了一個典型的build.gradle檔案的內容:

                    plugins {
                        id 'org.springframework.boot' version '2.0.3.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命令列介面
            spring boot命令列介面是一個可以使你快速使用spring 原型的命令列工具。它可以使你執行groovy指令碼,意味著你可以使用一個沒有太多
            樣本程式碼的熟悉的類java語法。
            
            你不需要使用命令列介面操作spring boot,但是它確實是使spring應用執行的最快方式。

            10.2.1 自定義安裝
                你可以從spring軟體倉庫下載spring命令列介面。

                spring-boot-cli-2.0.3.RELEASE-bin.zip
                spring-boot-cli-2.0.3.RELEASE-bin.tar.gz
                簡化版同樣可以.
                
                下載下來以後,參考解壓包中檔案INSTALL.txt中的說明進行安裝。總之,在解壓包的bin/目錄下有一個spring指令碼。你可以對.jar檔案使用
                java -jar命令(這個指令碼幫助你確保類路徑設定正確)。

        10.2.2 使用SDKMAN安裝!
            SDKMAN!(軟體開發工具管理器)可以用來管理多個版本的各種二進位制SDKs,包括Groovy和spring boot命令列介面。獲取SDKMAN!
            從sdkman.io下載並且使用以下命令安裝spring boot:
                $ sdk install springboot
                $ spring --versions
            如果你要發揮命令列的特性並且想要很容易的獲得你所建立的版本,使用以下命令:
                $ sdk install springboot dev
                    /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.0.3.RELEASE-bin/spring-2.0.3.RELEASE/
                $ sdk default springboot dev
                $ springboot --version
                    Spring CLI v2.0.3.RELEASE
            以上呼叫dev例項安裝了一個本地的spring例項。它指出了你的目標路徑,所以每次重新建立spring boot,spring都是最新的。
            你可以通過以下命令來檢視:

                $ sdk ls springboot

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

                ================================================================================
                + - local version
                * - installed
                > - currently in use
                ================================================================================
        10.2.3 OSX Homebrew安裝
            如果你在Mac環境並且使用Homebrew,你可以使用以下命令安裝spring boot命令列介面:

                $ brew tap pivotal/tap
                $ brew install springboot
                    Homebrew installs spring to /usr/local/bin.

            [注意]
                如果你沒有看到以上結果,你安裝的brew可能已經過時了。如果那樣,執行brew update並且重試。

        10.2.4 MacPorts安裝
            如果你在Mac環境中使用MacPorts,你可以通過以下命令安裝spring boot命令列介面:

            $ sudo port install spring-boot-cli
        10.2.5 命令列實現
            spring boot命令列介面提供BASH和zsh shells命令實現指令碼。你可以從任何shell中提取指令碼並放在你個人或是系統的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命令列介面,命令列實現指令碼會自動註冊到你的shell中。

        10.2.6 Windows Scoop安裝
            如果你在windows環境使用Scoop,你可以使用以下命令安裝spring boot命令列介面:

                > scoop bucket add extras
                > scoop install springboot
                Scoop installs spring to ~/scoop/apps/springboot/current/bin.

            [注意]
                如果沒有看到以上結果,你安裝的scoop可能已經過時。如果那樣,執行scoop update並且重試。

        10.2.7 快速啟動spring命令列介面例項
            你可以使用以下web應用測試你的安裝。首先,建立一個app.groovy檔案,如下:

                @RestController
                class ThisWillActuallyRun {

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

                }
                然後在shell中執行檔案,如下:

                $ spring run app.groovy
            [注意]
                由於要下載依賴,第一次執行應用會很慢。以後執行會快很多。

                在你的瀏覽器中訪問localhost:8080. 你會看到以下輸出:

                Hello World!
        10.3 從早期版本更新Spring Boot
            如果你要更新早期的spring boot,參考專案wiki中的“migration guide”,裡面提供了詳細的更新說明。參考“release notes”中的
            “new and noteworthy”,瞭解每個版本中的新特性。
            
            更新一個已存在的命令列介面版本,使用適當的包管理器命令,如果你是手動安裝的命令列介面,參考標準說明書,記得更新環境變數
            的路徑並移除舊的引用。

    11. 開發你的第一個spring boot應用
        本節描述瞭如何開發一個具有spring boot特性的簡單的“Hello World”Web應用。考慮到多數IDE的支援,我們使用maven構建這個專案。

        [小竅門]
            spring.io網站包含了許多使用spring boot的啟動引導,如果你有特殊的需求,可以參考那裡。你可以跳過以下步驟去start.spring.io在搜
            索器中選擇Web依賴直接建立專案。這樣建立一個新專案後你就可以開始編程式碼了。可以參考spring初始化文件瞭解更多細節。
        
        開始之前,開啟終端執行以下命令以保證你安裝的的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.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)
                Maven home: /usr/local/Cellar/maven/3.3.9/libexec
                Java version: 1.8.0_102, vendor: Oracle Corporation
        [注意]
            本樣例需要建立資料夾。隨後的介紹假設你在自己的目錄中已經建立好了合適的資料夾。

        11.1 建立POM
            開始時我們需要建立一個maven的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.3.RELEASE</version>
                </parent>

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

            </project>

            [注意]
                在這一點上,你可以使用IDE(支援maven)匯入專案。為了簡單,本例我們繼續使用文字編輯器。

        11.2 新增依賴
            spring boot提供了一系列“Starters”來使你在類路徑中新增jar包。我們的應用樣例已經在pom的父本標籤部分使用了
            spring-boot-starter-parent。spring-boot-starter-parent提供了非常有用的對maven的預設支援。它同樣提供了依賴管理功能使你在
            新增“blessed”(spring boot的依賴)依賴時不需要再加版本標籤。
            
            “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本身沒有提供任何的依賴。可以在父本標籤
            下面新增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檔案。包括以下內容:
            
                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) throws Exception {
                        SpringApplication.run(Example.class, args);
                    }

                }
                
                雖然程式碼不多,但是發生了好多事情。接下來我們逐步介紹。

            11.3.1 @RestController和@RequestMapping註解
                例項檔案中第一個註解是@RestController。這是一個很老的註解。他告訴spring本類的角色是一個[email protected](控制器),因此
                處理web請求時spring就會考慮呼叫這個類。
                
                @RequestMapping註解提供路徑資訊。它告訴spring任何滿足“/”路徑的HTTP請求都會對映到home方法。@RestController註解告訴spring
                將結果字串返回給請求者。

                [小竅門]
                    @RestController和@RequestMapping註解是spring MVC註解. (並不是Spring Boot特有.) 在spring 參考文件中檢視MVC部分可以
                    瞭解更多細節。

            11.3.2 @EnableAutoConfiguration註解
                第二個類級註解是@EnableAutoConfiguration。這個註解告訴Spring Boot根據已新增的依賴猜測你將如何配置spring。由於
                spring-boot-starter-web添加了Tomcat和Spring MVC,自動配置認為你在開發Web應用,所以對spring進行了相應的設定。
                
                啟動器和自動配置:
                    自動配置被設計為可以很好的支援“Starters”,但是兩者並不是直接捆綁在一起的。你也可以選擇外部的依賴,spring boot
                    依然儘可能的將其自動配置到你的應用中。
                
            11.3.3 “main”方法
                應用的最後部分是main方法。它只是一個標準的遵循java約定的應用入口方法。我們的main方法通過呼叫run方法將入口委託給
                spring boot的SpringApplication類。SpringApplication引導我們的應用開啟spring,反過來,通過spring開啟自動配置
                Tomcat伺服器。我們需要將Example.class作為run方法的引數來告訴SpringApplication哪個是主要的spring元件。引數列表也會
                用來顯示一些命令列引數。

        11.4 執行例項
            在本節,你的應用將會執行起來。由於你使用了spring-boot-starter-parent POM,你有一個的很好執行目標。在專案的根目錄執行
            mvn spring-boot:run來開啟應用。你會看到類似以下內容的輸出:

                $ mvn spring-boot:run

                  .   ____          _            __ _ _
                 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
                ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
                 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
                  '  |____| .__|_| |_|_| |_\__, | / / / /
                 =========|_|==============|___/=/_/_/_/
                 :: Spring Boot ::  (v2.0.3.RELEASE)
                ....... . . .
                ....... . . . (log output here)
                ....... . . .
                ........ Started Example in 2.222 seconds (JVM running for 6.514)
                If you open a web browser to localhost:8080, you should see the following output:

                Hello World!
                To gracefully exit the application, press ctrl-c.

        11.5 建立一個可執行jar
            我們通過建立一個可以執行在生產中的完全獨立的可執行jar檔案作為本例項的結束。可執行jars(有時也叫“fat jars”)中包含了你的編譯類
            以及所有程式碼執行需要的依賴。

            可執行jars和Java:
                
                java不支援jar檔案間的嵌入。這樣出現的問題是你很難部署一個自己的獨立應用。
                
                為了解決這個問題,許多開發者生使用“uber” jars. 一個uber jar將所有應用所需依賴的類檔案打包在了一起。這樣就很難看出
                你的應用中都有哪些庫。並且有同樣檔名的屬於不同jar的不同檔案也不能一起放在uber jar中。
                
                spring boot使用了一種不同的方式使得可以直接內嵌jar。

            建立一個可執行jar,我們需要在pom.xml中新增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包含<executions>配置來繫結重新打包。如果你不是用父本(parent)POM,你需要自己宣告這個配置。
                檢視外掛文件瞭解更多細節。

            儲存你的pom.xml並且在命令列執行以下內容:

                $ 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.3.RELEASE:repackage (default) @ myproject ---
                [INFO] ------------------------------------------------------------------------
                [INFO] BUILD SUCCESS
                [INFO] ------------------------------------------------------------------------
                
            如果你檢視目標目錄,你應該會看到myproject-0.0.1-SNAPSHOT.jar。這個檔案大約10M大小。如果你想要檢視檔案裡面的內容,你可以使用
            jar tvf,如下:

                $ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
            
            你會在目標資料夾中看到一個更小的名為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.0.3.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倉庫也有很多你可以執行的樣例。這些樣例是獨立的。
        
        另外,下一步是閱讀Part III, “Using Spring Boot”。如果你實在缺乏耐心,你可以直接跳到spring boot特性部分。