Spring Boot 2.2.2.RELEASE 版本中文參考文檔


寫在前面

在我初次接觸MongoDB的時候,是為了做一個監控系統和日志分析系統。當時在用Java操作MongoDB數據里的數據的時候,都是在網上查找Demo示例然后完成的功能,相信大家也同樣的體會,網上大都是這種一個入門的小Demo,很少有深入講解的。功能調通后,自己琢磨效率方面的問題,便開始自己的瞎嘗試之路,然后在產品啟動階段初始化多個MongoClient對象,搞了一個類似於連接池一類的池子,完成之后打心眼里覺得自己真是個小機靈鬼。 大概過了一年,為了系統地學習MongoDB的一些高級特性,在網上尋找Blog和Mooc無果后,我便把眼光落到了MongoDB提供的官方文檔上。從看文檔開始,我就覺得原來的認知太淺了。MongoDB Java Driver官方的文檔一開始就介紹MongoClient已經做好連接池一類的機制,而軟件開發人員只需要在創建對象階段設置好參數即可。 后來慢慢地越來越意識到,一個新的技術入門最好的方式就是從閱讀官方的文檔開始,而像Spring、MongoDB這類技術的官方文檔,入門、高級特性都寫得很詳細。用正確的方法做正確的事情。 關於Spring Boot的參考文檔翻譯,是因為后來的工作中開始大規模地用Spring Boot的技術,自己在學習的過程中,發現Spring Boot比較新的版本的參考文檔一般都只有英語的,一些社區在自發進行翻譯的文檔版本都不是最新的。在學習的過程中,正好把參考文檔的翻譯也整理出來,也算是一種歸檔。如有疑問,歡迎大家一起交流。

關於文檔內容,有幾點需要聲明下:

  • 由於時間有限,文檔先初步先把Maven方式使用Spring Boot部分翻譯出來,Gradle方式和Spring CLI翻譯部分后續如果有需要會整理出來。
  • 文檔是從Spring Boot官方文檔的第二部分開始的,因為第一部分只是提供了Spring Boot參考文檔的導覽。
  • 關於翻譯的信、達、雅。我只能盡力做到“信”和“達”,“雅”確實因為能力不夠達不到。文檔有一些單詞的翻譯,在不能做到信的情況下,我會把英文參考文檔中的單詞或者原文貼出來,大家可以自行體會官方文檔想要表達的意圖。

開始

如果您是從Spring Boot或“Spring”開始的,請先閱讀本節。它回答了基本的“什么”,如何”和“為什么”問題。它包括對Spring Boot的介紹以及安裝說明。然后,我們將引導您構建第一個Spring Boot應用程序,並在討論過程中討論一些核心原理。

2.1 介紹Spring Boot

Spring Boot使創建可運行的獨立,生產級基於Spring的應用程序變得容易。我們對Spring平台和第三方庫持固執己見[opinionated]的觀點,這樣您就可以以最小的麻煩[fuss]開始使用。大多數Spring Boot應用程序只需要很少的Spring配置。

您可以使用Spring Boot創建可以通過使用java -jar或更傳統的war部署啟動的Java應用程序。我們還提供了一個運行“spring腳本”的命令行工具。

我們的主要目標是:

  • 為所有Spring開發提供根本上更快且可廣泛訪問的入門體驗。
  • 開箱即用,但由於需求開始與默認值有所出入,因此很快就會擺脫困境。[Be opinionated out of the box but get out of the way quickly as requirements start to diverge from the defaults.]
  • 提供一系列大型項目通用的非功能性功能(例如嵌入式服務器,安全性,指標,運行狀況檢查和外部化配置)。
  • 完全沒有代碼生成,也不需要XML配置。

2.2 系統要求

Spring Boot 2.2.2.RELEASE需要Java 8,並且與Java 13(包括)兼容。 還需要Spring Framework 5.2.2.RELEASE或更高版本。

為以下構建工具提供了明確的構建支持:

2.2.1 Servlet容器

Spring Boot支持以下嵌入式Servlet容器:

2.3 安裝Spring Boot

Spring Boot可以與“經典” Java開發工具一起使用,也可以作為命令行工具安裝。 無論哪種方式,都需要Java SDK v1.8或更高版本。

在開始之前,您應該使用以下命令檢查當前的Java安裝版本:

$ java -veriosn

如果您不熟悉Java開發,或者想嘗試使用Spring Boot,則可能要先嘗試使用Spring Boot CLI(命令行界面)。 否則,請繼續閱讀“經典”安裝說明。

2.3.1 Java開發人員的安裝說明

您可以像使用任何標准Java庫一樣使用Spring Boot。 為此,請在類路徑中包含相應的spring-boot-*。jar文件。 Spring Boot不需要任何特殊的工具集成,因此您可以使用任何IDE或文本編輯器。而且,Spring Boot應用程序沒有什么特別之處,因此您可以像運行其他Java程序一樣運行和調試Spring Boot應用程序。

盡管您可以復制Spring Boot jar,但是我們通常建議您使用支持依賴關系管理的構建工具(例如Maven或Gradle)。

Maven安裝

Spring Boot與Apache Maven 3.3或更高版本兼容。如果尚未安裝Maven,則可以按照maven.apache.org中的說明進行操作。

在許多操作系統上,Maven可以與程序包管理器一起安裝。 如果使用OSX Homebrew,請嘗試brew install maven。 Ubuntu用戶可以運行sudo apt-get install maven。 具有Chocolatey的Windows用戶可以從提升的(管理員)提示符下運行choco install maven。

Spring Boot依賴項使用的groupId為org.springframework.boot。 通常,您的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 https://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.2.2.RELEASE</version>
    </parent>

    <!-- Override inherited settings -->
    <description/>
    <developers>
        <developer/>
    </developers>
    <licenses>
        <license/>
    </licenses>
    <scm>
        <url/>
    </scm>
    <url/>

    <!-- 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繼承,或者您可能不喜歡我們的默認設置。在這些情況下,請參閱使用 不帶父POM的Spring Boot以獲得使用導入范圍的替代解決方案。

Gradle安裝

2.3.2 安裝Spring Boot CLI

2.3.3 從較早版本的Spring Boot升級

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

本節介紹如何開發一個簡單的“Hello World” Web應用程序,該應用程序重點介紹Spring Boot的一些關鍵功能。 我們使用Maven來構建該項目,因為大多數IDE都支持它。

spring.io網站包含許多使用Spring Boot的“入門” 指南。 如果您需要解決特定的問題,請首先檢查。 通過訪問 start.spring.io並從依賴項搜索器中選擇“ Web”啟動器,可以簡化以下步驟。 這樣做會生成一個新的項目結構,以便您可以立即 開始編碼。 查看 Spring Initializr文檔以獲取更多詳細信息。

在開始之前,請打開終端並運行以下命令,以確保安裝了有效的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.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_102, vendor: Oracle Corporation
該示例需要在其自己的文件夾中創建。 隨后的說明假定您已經創建了一個合適的文件夾,並且它是當前目錄。

2.4.1 創建POM

我們需要先創建一個Maven pom.xml文件。 pom.xml是用於構建項目的配方[recipe]。打開您喜歡的文本編輯器並添加以下內容:

<?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 https://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.2.2.RELEASE</version>
    </parent>

    <description/>
    <developers>
        <developer/>
    </developers>
    <licenses>
        <license/>
    </licenses>
    <scm>
        <url/>
    </scm>
    <url/>

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

</project>

上面的清單應為您提供有效的構建。您可以通過運行mvn package命令對其進行測試(目前,您可以忽略“jar will be empty - no content was marked for inclusion!”警告)。

此時,您可以將項目導入IDE(大多數現代Java IDE包括對Maven的內置支持)。為簡單起見,我們在此示例中繼續使用純文本編輯器。

2.4.2 添加類路徑依賴

Spring Boot提供了許多“啟動器”,使您可以將jar添加到類路徑中。我們的冒煙測試應用程序在POM的父部分中使用spring-boot-starter-parent。 spring-boot-starter-parent是一個特殊的啟動器,提供有用的Maven默認值。它還提供了一個依賴項管理部分,以便您可以省去最佳版本的依賴項的標簽。

其他“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並在父部分的正下方添加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本身。

2.4.3 編寫代碼

要完成我們的應用程序,我們需要創建一個Java文件。默認情況下,Maven從src/main/java編譯源代碼,因此您需要創建該文件夾結構,然后添加一個名為src/main/java/ Example.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) {
        SpringApplication.run(Example.class, args);
    }

}

盡管這里沒有太多代碼,但是代碼里正在發生很多事情。我們將在接下來的幾節中逐步介紹重要部分。

@RestController 和 @RequestMapping注解

Example類的第一個注釋是@RestController。這被稱為stereotype注解。它為人們閱讀代碼提供了提示,對於Spring來說,類扮演了特定角色。在這種情況下,我們的類是一個Web @Controller,因此Spring在處理傳入的Web請求時會考慮使用它。

@RestController 和 @RequestMapping 注解是Spring MVC注釋(它們不是Spring Boot專有的注解)。有關更多詳細信息,請參見Spring參考文檔中的 MVC章節部分。

@EnableAutoConfiguration 注解

第二個類級別的注解是 @EnableAutoConfiguration。這個注解告訴Spring Boot根據所添加的jar依賴關系“猜測”您如何配置Spring。由於spring-boot-starter-web添加了Tomcat和Spring MVC,因此自動配置假定您正在開發Web應用程序並相應地設置Spring。

啟動器和自動配置

自動配置旨在與“啟動器”配合使用,但是這兩個概念並沒有直接聯系在一起。您可以在啟動程序之外自由選擇jar依賴項。Spring Boot仍會盡其所能自動配置您的應用程序。

Main方法

我們應用程序的最后一部分是main方法。 這只是遵循Java約定的應用程序入口點的標准方法。 我們的主要方法通過調用run委托給Spring Boot的SpringApplication類。 SpringApplication會引導我們的應用程序,並啟動Spring,后者反過來又會啟動自動配置的Tomcat Web服務器。 我們需要將Example.class作為參數傳遞給run方法,以告訴SpringApplication哪個是主要的Spring組件。 args數組也通過傳遞以公開任何命令行參數。

2.4.4 運行示例

此時,您的應用程序應該可以工作了。 由於您使用了spring-boot-starter-parent父POM,因此您具有一個有用的運行目標,可以用來啟動該應用程序。 從根項目目錄輸入命令 mvn spring-boot:run 以啟動應用程序。 您應該看到類似於以下內容的輸出:

$ mvn spring-boot:run

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

如果打開Web瀏覽器到localhost:8080,則應該看到以下輸出:

Hello World!

要正常退出該應用程序,請按ctrl-c。

2.4.5 構建可執行Jar

通過構建可以在生產環境中運行的完全獨立的可執行jar文件來結束本節示例。可執行jar(有時稱為“fat jar”)是包含您的已編譯類以及代碼需要運行的所有jar依賴項的歸檔文件。

可執行jar和Java

Java沒有提供加載嵌套jar文件(jar中本身包含的jar文件)的標准方法。如果您要分發獨立的應用程序,則可能會出現問題。 為了解決這個問題,許多開發人員使用“超級[uber]”容器。 超級[uber] 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包含配置以綁定重新打包目標。 如果不使用父POM,則需要自己聲明此配置。 有關詳細信息,請參見 插件文檔

保存您的pom.xml並從命令行運行mvn軟件包,如下所示:

$ 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.2.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

您還將在目標目錄中看到一個名為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.2.2.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
 

和以前一樣,要退出該應用程序,請按ctrl-c。

第二章節結束。

 


后續其他章節和Java相關知識和資料會在公眾號同步更新,關注下咯~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM