(二)Spring Boot 起步入門(翻譯自Spring Boot官方教程文件)1.5.9.RELEASE

擁抱心中的夢想發表於2017-12-18
  • 檢視本文英文文件,請點選 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” 的命令列工具。
  • 我們的主要目標是:
    1. 為所有Spring開發提供一個更快,更廣泛的入門體驗。
    2. 開箱即用,但隨著需求開始偏離預設設定,快速退出(也就是自己做些其他配置)。
    3. 提供大量廣泛使用的非功能特性(如嵌入式伺服器,安全、指標、執行狀態檢查、外部配置等)
    4. 沒有程式碼生成也不需要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、手動安裝

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並從依賴關係搜尋器中選擇Webstarter來快速執行以下步驟。 這將自動生成一個新的專案結構,以便您可以立即開始編碼檢查文件以獲取更多詳細資訊。

  • 在我們開始之前,請開啟命令終端,檢查是否安裝了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-parentspring-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的特性

相關文章