1. 程式人生 > >springboot日誌

springboot日誌

Spring Boot使用Commons Logging進行所有內部日誌記錄,但使基礎日誌實現開放。 預設配置提供了Java Util LoggingLog4J2Logback。 在每種情況下,記錄器都預先配置為使用控制檯輸出和可選檔案輸出都可用。

預設情況下,如果使用'Starters',將會使用Logback。 還包括適當的Logback路由,以確保使用Java Util Logging,Commons Logging,Log4J或SLF4J的依賴庫都能正常工作。

日誌格式

Spring Boot的預設日誌輸出如下所示:

2014-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]

輸出以下專案:

  • 日期和時間 - 毫秒精度並且容易排序。
  • 日誌級別 - ERROR, WARN, INFO, DEBUG, TRACE.
  • 程序ID。
  • ---分隔符來區分實際日誌訊息的開始。
  • 執行緒名稱 - 括在方括號中(可能會截斷控制檯輸出)。
  • 記錄器名稱 - 這通常是源類名(通常縮寫)。
  • 日誌訊息。

application.properties中可配置日誌屬性相關介紹

1.logging.level.root=指定日誌級別(ERROR, WARN, INFO, DEBUG, TRACE.),.logging.level.xxxx=指定某個包日誌級別(ERROR, WARN, INFO, DEBUG, TRACE.)

2.logging.path=日誌檔案儲存的路徑,可以是確切的位置或相對於當前目錄。

3.logging.file=日誌檔案的名稱,可以是確切的位置或相對於當前目錄(如果該屬性不配置,預設檔名為spring.log)

4.logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n 指定日誌在控制檯輸出的格式

5.logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n 指定日誌在日誌檔案中的輸出格式

上述配置的編碼中,對應符號的含義如下


%d{HH:mm:ss.SSS}——日誌輸出時間

%thread——輸出日誌的程序名字,這在Web應用以及非同步任務處理中很有用

%-5level——日誌級別,並且使用5個字元靠左對齊

%logger- ——日誌輸出者的名字

%msg——日誌訊息

%n——平臺的換行符

6.logging.exception-conversion-word=記錄日誌異常時使用的轉換字

7.ogging.pattern.level=用於呈現日誌級別的格式(預設%5p)。 (僅支援預設logback設定。)

8.logging.file.max-size=50M 指定日誌檔案的最大值,當超過這個最大值是springboot會對日誌進行拆分。

9.logging.file.max-history=0將(logging.file.max-size)之前的日誌檔案存檔 

10.spring.output.ansi.enabled= %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}    如果你的終端支援 ANSI,彩色的輸出會提供可讀性。可以設定 spring.output.ansi.enabled 來改變預設的自動檢測(detect)。

11.logging.config=log/xxx指定配置檔案的完整路徑

控制檯輸出

預設的日誌配置會在控制檯顯示訊息。 預設情況下會記錄ERROR,WARN和INFO級別的訊息。 您還可以通過--debug啟動您的應用程式來啟用“debug”模式。

$ java -jar myapp.jar --debug

您還可以在application.properties中指定debug=true。

當啟用debug模式時,配置核心記錄器(嵌入式容器,Hibernate和Spring Boot)的選擇可以輸出更多資訊。 啟用debug 模式不會將應用程式配置為使用DEBUG級別記錄所有訊息。

或者,您可以使用--trace啟動應用程式(或在您的application.properties中為trace=true)啟用“trace”模式。 這將為核心記錄器(嵌入式容器,Hibernate模式生成和整個Spring組合)啟用trace日誌。

日誌顏色輸出

如果您的終端支援ANSI,顏色輸出可以增加可讀性。 您可以將spring.output.ansi.enabled設定為支援的值來覆蓋自動檢測。

使用%clr關鍵字配置顏色編碼。 在最簡單的形式下,轉換器將根據日誌級別對輸出進行著色,例如:

%clr(%5p)

日誌級別對映到顏色如下:

  • blue
  • cyan
  • faint
  • green
  • magenta
  • red
  • yellow

26.3 檔案輸出

如果你想要寫日誌檔案,你需要設定屬性:logging.file 或 logging.path。

兩個屬性的組合使用,情況如下:

當日志文件到達10Mb時會迴圈儲存。檔案的大小限制可通過logging.file.max-size屬性設定。之前儲存的日誌檔案會無限期存檔,除非配置logging.file.max-history屬性。

Note 日誌系統在應用程式生命週期的早期被初始化。因此,日誌的屬性在通過@PropertySource載入的屬性檔案中找不到。

Tip 日誌屬性獨立於真實的日誌基礎架構以外。因此,Spring Boot不管理特定的配置主鍵(例如Logback的logback.configurationFile)。

日誌級別

所有支援的日誌記錄系統都可以在Spring Environment 中設定log級別(例如在application.properties中),使用‘logging.level.*=LEVEL’,其中'LEVEL'是TRACE,DEBUG,INFO,WARN,ERROR,FATAL, OFF之一。 可以使用logging.level.root配置根記錄器。 示例application.properties:

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

預設情況下,Spring Boot會重新啟動Thymeleaf INFO訊息,以便它們以DEBUG級別進行記錄。 這有助於降低標準日誌輸出中的噪音。 有關如何在自己的配置中應用重對映的詳細資訊,請參閱LevelRemappingAppender

自定義日誌配置

可以通過在類路徑中包含適當的庫來啟用各種日誌系統,並通過在類路徑的根目錄中提供合適的配置檔案,或在Spring Environment屬性logging.config指定的位置進一步配置。

您可以使用org.springframework.boot.logging.LoggingSystem系統屬性強制Spring Boot使用特定的日誌記錄系統。該值應該是LoggingSystem實現的全名。 您還可以使用none值完全禁用Spring Boot的日誌記錄配置。

由於在建立ApplicationContext之前初始化日誌,因此無法在Spring @Configuration檔案中控制@PropertySources的日誌記錄。 系統屬性和常規的Spring Boot外部配置檔案工作正常。

根據您的日誌記錄系統,將會載入以下檔案:

正文

Spring Boot中文文件(官方文件翻譯 基於1.5.2.RELEASE) 

侯法超

  侯法超 釋出於 2017/04/03 23:51 

字數 34425

閱讀 31432

收藏 548

點贊 30

 評論 21

作者:Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marcel Overdijk, Christian Dupuis, Sébastien Deleuze, Michael Simons

1.5.2.RELEASE

歡迎加群交流:490788638

Part I. Spring Boot 文件

本節簡要介紹了Spring Boot文件,是整個文件的參考指南。 您可以完整閱讀本參考指南,或者如果您不感興趣的話可以跳過該部分。

1. 關於文件

2. 獲得幫助

如果使用 Spring Boot 時遇到問題,可以在下面獲取幫助:

  • 嘗試 How-to’s - 這裡為最常見的問題提供解決方案。
  • 瞭解Spring的基礎知識 - Spring Boot建立在許多其他Spring專案上,請檢視 spring.io 網站以獲取其他專案的參考文件。 如果您剛剛開始使用Spring,請閱讀這個指南
  • 在stackoverflow上提問題 - 我們會一起關注 stackoverflow.com 上有spring-boot標籤的問題。

Spring Boot 所有的東西都是開源的,包括文件! 如果您發現文件有問題; 或者如果你想改進他們,歡迎參與

3. 第一步

如果你剛剛開始使用 Spring Boot,或剛剛開始使用“Spring”,請從這裡開始!

4. 使用 Spring Boot

5. 瞭解Spring Boot功能

需要有關Spring Boots核心功能的更多細節?請看這裡

6. 轉移到生產環境

當您準備好將Spring Boot 應用程式放到生產環境時,我們有一些您可能會喜歡的技巧!

Part II. 入門指南

如果你剛剛開始使用Spring Boot,這是你的一部分內容! 在這裡我們將會回答一些基本的“what?”, “how?” 和 “why?”的問題。 在這裡你會找到一個詳細的Spring Boot介紹和安裝說明。 然後,我們將構建我們的第一個Spring Boot應用程式,並討論一些核心原則。

8. Spring Boot 介紹

Spring Boot可以基於Spring輕鬆建立可以“執行”的、獨立的、生產級的應用程式。 對Spring平臺和第三方類庫我們有自己看法和意見(約定大於配置),所以你最開始的時候不要感到奇怪。大多數Spring Boot應用程式需要很少的Spring配置。

您可以使用Spring Boot建立可以使用java -jar或傳統 war 包部署啟動的Java應用程式。 我們還提供一個執行“spring scripts”的命令列工具。

我們的主要目標是:

  • 為所有的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提供了顯式構建支援。

雖然您可以在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可以與“經典(classic)”Java開發工具一起使用或作為命令列工具安裝。 無論如何,您將需要Java SDK v1.6或更高版本。 在開始之前檢查當前的Java安裝:

$ 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

因為下載依賴的庫,首次執行應用程式需要一些時間,。 後續執行將會更快。

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)
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功能

Part III. 使用 Spring Boot

本部分將詳細介紹如何使用Spring Boot。 這部分涵蓋諸如構建系統,自動配置以及如何執行應用程式等主題。 我們還介紹了一些Spring Boot的最佳實踐(best practices)。 雖然Spring Boot沒有什麼特殊之處(它只是一個可以使用的庫),但是有一些建議可以讓您的開發過程更容易一些。

如果您剛剛開始使用Spring Boot,那麼在深入本部分之前,您應該閱讀入門指南

13. 構建系統

強烈建議您選擇一個支援依賴管理並可以使用“Maven Central”儲存庫的構建系統。 我們建議您選擇Maven或Gradle。 Spring Boot 可以與其他構建系統(例如 Ant )配合使用,但是它們不會得到很好的支援。

13.1 依賴管理

每個版本的Spring Boot提供了一個它所支援的依賴關係列表。 實際上,您不需要為構建配置檔案中的這些依賴關係提供版本,因為Spring Boot會為您進行管理這些依賴的版本。 當您升級Spring Boot本身時,這些依賴關係也將以一致的進行升級。

如果您覺得有必要,您仍然可以指定一個版本並覆蓋Spring Boot建議的版本。

管理的列表中包含可以使用Spring Boot的所有Spring模組以及第三方庫的精簡列表。 該列表可作為標準的物料(Materials)清單(spring-boot-dependencies)使用,並且還提供了對 Maven 和 Gradle 的額外支援。

Spring Boot的每個版本與Spring Framework的基本版本相關聯,因此我們強烈建議您不要自己指定其版本。

13.2 Maven

Maven使用者可以從 spring-boot-starter-parent-parent 專案中繼承,以獲得合理的預設值。 父專案提供以下功能:

  • Java 1.6作為預設編譯器級別。
  • 原始碼UTF-8編碼。
  • 依賴關係管理,允許您省略常見依賴的<version>標籤,其預設版本繼承自spring-boot-dependencies POM。
  • 更合理的資源過濾
  • 針對application.properties和application.yml的更合理的資源過濾,包括特定的檔案(例如application-foo.properties和application-foo.yml)
  • 最後一點:由於預設的配置檔案接受Spring樣式佔位符(${...}),Maven過濾更改為使用 @[email protected] 佔位符(您可以使用Maven屬性resource.delimiter覆蓋它)。

13.2.1 繼承啟動器parent

要將專案配置為繼承spring-boot-starter-parent,只需設定<parent>標籤如下:

<!-- Inherit defaults from Spring Boot -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>

您只需要在此依賴項上指定Spring Boot版本號。 如果您匯入其他起始器,則可以放心地省略他們的版本號。

通過該設定,您還可以通過覆蓋自己的專案中的屬性來覆蓋單個依賴。 例如,要升級到另一個 Spring Data 版本序列,您需要將以下內容新增到您的pom.xml中。

<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>

13.2.2 使用沒有父POM的 Spring Boot

不是每個人都喜歡從spring-boot-starter-parent POM繼承。 您公司可能有自己標準的父母,或者您可能只希望明確宣告所有的Maven配置。

如果您不想使用spring-boot-starter-parent,則仍然可以通過使用scope=import依賴來保持依賴管理(但不能進行外掛管理)的好處:

<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

該設定不允許您使用如13.2.1 所述的屬性來覆蓋單個依賴關係。 要實現相同的結果,您需要在spring-boot-dependencies條目之前在專案的dependencyManagement中新增一個條目。 例如,要升級到另一個Spring Data發行版本,您需要將以下內容新增到您的pom.xml中。

<dependencyManagement>
    <dependencies>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Fowler-SR2</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在上面的例子中,我們指定了一個BOM,但是任何依賴關係型別都可以被這樣覆蓋。

13.2.3 更改Java版本

spring-boot-starter-parent選擇相當保守的Java相容性版本。 如果要遵循我們的建議並使用更高版本的Java版本,可以新增java.version屬性:

<properties>
    <java.version>1.8</java.version>
</properties>

13.2.4 使用Spring Boot Maven外掛

Spring Boot包括一個Maven外掛,可以將專案打包成可執行jar。 如果要使用它,請將外掛新增到<plugins>部分:

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

如果您使用Spring Boot啟動器 parent pom,則只需要新增這個外掛,除非您要更改parent中定義的設定,否則不需要進行配置。

13.3 Gradle

Gradle使用者可以直接在其依賴關係部分匯入“啟動器”。 不像Maven,沒有“超級父”匯入來共享一些配置。

repositories {
    jcenter()
}

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

spring-boot-gradle-plugin也是可用的,它提供了從原始碼建立可執行jar並執行專案的任務。 它還提供依賴關係管理,除其他功能外,還允許您省略由Spring Boot管理的任何依賴關係的版本號:

plugins {
    id 'org.springframework.boot' version '1.5.2.RELEASE'
    id 'java'
}


repositories {
    jcenter()
}

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

13.4 Ant

可以使用Apache Ant + Ivy構建Spring Boot專案。 spring-boot-antlib“AntLib”模組也可用於幫助Ant建立可執行檔案。

要宣告依賴關係,典型的ivy.xml檔案將如下所示:

<ivy-module version="2.0">
    <info organisation="org.springframework.boot" module="spring-boot-sample-ant" />
    <configurations>
        <conf name="compile" description="everything needed to compile this module" />
        <conf name="runtime" extends="compile" description="everything needed to run this module" />
    </configurations>
    <dependencies>
        <dependency org="org.springframework.boot" name="spring-boot-starter"
            rev="${spring-boot.version}" conf="compile" />
    </dependencies>
</ivy-module>

典型的build.xml將如下所示:

<project
    xmlns:ivy="antlib:org.apache.ivy.ant"
    xmlns:spring-boot="antlib:org.springframework.boot.ant"
    name="myapp" default="build">

    <property name="spring-boot.version" value="1.3.0.BUILD-SNAPSHOT" />

    <target name="resolve" description="--> retrieve dependencies with ivy">
        <ivy:retrieve pattern="lib/[conf]/[artifact]-[type]-[revision].[ext]" />
    </target>

    <target name="classpaths" depends="resolve">
        <path id="compile.classpath">
            <fileset dir="lib/compile" includes="*.jar" />
        </path>
    </target>

    <target name="init" depends="classpaths">
        <mkdir dir="build/classes" />
    </target>

    <target name="compile" depends="init" description="compile">
        <javac srcdir="src/main/java" destdir="build/classes" classpathref="compile.classpath" />
    </target>

    <target name="build" depends="compile">
        <spring-boot:exejar destfile="build/myapp.jar" classes="build/classes">
            <spring-boot:lib>
                <fileset dir="lib/runtime" />
            </spring-boot:lib>
        </spring-boot:exejar>
    </target>
</project>

13.5 啟動器

啟動器是一組方便的依賴關係描述符,可以包含在應用程式中。 您可以獲得所需的所有Spring和相關技術的一站式服務,無需通過示例程式碼搜尋和複製貼上依賴配置。 例如,如果要開始使用Spring和JPA進行資料庫訪問,那麼只需在專案中包含spring-boot-starter-data-jpa依賴關係即可。

啟動器包含許多依賴關係,包括您需要使專案快速啟動並執行,並具有一致的受支援的依賴傳遞關係。

What’s in a name

所有正式起動器都遵循類似的命名模式: spring-boot-starter- * ,其中 * 是特定型別的應用程式。 這個命名結構旨在幫助你快速找到一個啟動器。 許多IDE中的Maven外掛允許您按名稱搜尋依賴項。 例如,安裝Eclipse或STS的Maven外掛後,您可以簡單地在POM編輯器中點選 Dependency Hierarchy,並在filter輸入“spring-boot-starter”來獲取完整的列表。 如建立自己的啟動器部分所述,第三方啟動程式不應該從Spring-boot開始,因為它是為正式的Spring Boot artifacts 保留的。 acme 的 第三方啟動器通常被命名為acme-spring-boot-starter。

Spring Boot在org.springframework.boot組下提供了以下應用程式啟動器:

表13.1. Spring Boot應用程式啟動器

名稱 描述 Pom
spring-boot-starter-thymeleaf 使用Thymeleaf檢視構建MVC Web應用程式的啟動器 Pom
spring-boot-starter-data-couchbase 使用Couchbase面向文件的資料庫和Spring Data Couchbase的啟動器 Pom
spring-boot-starter-artemis 使用Apache Artemis的JMS啟動器 Pom
spring-boot-starter-web-services Spring Web Services 啟動器 Pom
spring-boot-starter-mail Java Mail和Spring Framework的電子郵件傳送支援的啟動器 Pom
spring-boot-starter-data-redis Redis key-value 資料儲存與Spring Data Redis和Jedis客戶端啟動器 Pom
spring-boot-starter-web 使用Spring MVC構建Web,包括RESTful應用程式。使用Tomcat作為預設的嵌入式容器的啟動器 Pom
spring-boot-starter-data-gemfire 使用GemFire分散式資料儲存和Spring Data GemFire的啟動器 Pom
spring-boot-starter-activemq 使用Apache ActiveMQ的JMS啟動器 Pom
spring-boot-starter-data-elasticsearch 使用Elasticsearch搜尋和分析引擎和Spring Data Elasticsearch的啟動器 Pom
spring-boot-starter-integration Spring Integration 啟動器 Pom
spring-boot-starter-test 使用JUnit,Hamcrest和Mockito的庫測試Spring Boot應用程式的啟動器 Pom
spring-boot-starter-jdbc 使用JDBC與Tomcat JDBC連線池的啟動器 Pom
spring-boot-starter-mobile 使用Spring Mobile構建Web應用程式的啟動器 Pom
spring-boot-starter-validation 使用Java Bean Validation 與Hibernate Validator的啟動器 Pom
spring-boot-starter-hateoas 使用Spring MVC和Spring HATEOAS構建基於超媒體的RESTful Web應用程式的啟動器 Pom
spring-boot-starter-jersey 使用JAX-RS和Jersey構建RESTful Web應用程式的啟動器。spring-boot-starter-web的替代方案 Pom
spring-boot-starter-data-neo4j 使用Neo4j圖資料庫和Spring Data Neo4j的啟動器 Pom
spring-boot-starter-data-ldap 使用Spring Data LDAP的啟動器 Pom
spring-boot-starter-websocket 使用Spring Framework的WebSocket支援構建WebSocket應用程式的啟動器 Pom
spring-boot-starter-aop 使用Spring AOP和AspectJ進行面向切面程式設計的啟動器 Pom
spring-boot-starter-amqp 使用Spring AMQP和Rabbit MQ的啟動器 Pom
spring-boot-starter-data-cassandra 使用Cassandra分散式資料庫和Spring Data Cassandra的啟動器 Pom
spring-boot-starter-social-facebook 使用Spring Social Facebook 的啟動器 Pom
spring-boot-starter-jta-atomikos 使用Atomikos的JTA事務的啟動器 Pom
spring-boot-starter-security 使用Spring Security的啟動器 Pom
spring-boot-starter-mustache 使用Mustache檢視構建MVC Web應用程式的啟動器 Pom
spring-boot-starter-data-jpa 使用Spring資料JPA與Hibernate的啟動器 Pom
spring-boot-starter 核心啟動器,包括自動配置支援,日誌記錄和YAML Pom
spring-boot-starter-groovy-templates 使用Groovy模板檢視構建MVC Web應用程式的啟動器 Pom
spring-boot-starter-freemarker 使用FreeMarker檢視構建MVC Web應用程式的啟動器 Pom
spring-boot-starter-batch 使用Spring Batch的啟動器 Pom
spring-boot-starter-social-linkedin 使用Spring Social LinkedIn的啟動器 Pom
spring-boot-starter-cache 使用Spring Framework快取支援的啟動器 Pom
spring-boot-starter-data-solr 使用Apache Solr搜尋平臺與Spring Data Solr的啟動器 Pom
spring-boot-starter-data-mongodb 使用MongoDB面向文件的資料庫和Spring Data MongoDB的啟動器 Pom
spring-boot-starter-jooq 使用jOOQ訪問SQL資料庫的啟動器。 spring-boot-starter-data-jpa或spring-boot-starter-jdbc的替代方案 Pom
spring-boot-starter-jta-narayana Spring Boot Narayana JTA 啟動器 Pom
spring-boot-starter-cloud-connectors 使用Spring Cloud聯結器,簡化了與Cloud Foundry和Heroku等雲平臺中的服務連線的啟動器 Pom
spring-boot-starter-jta-bitronix 使用Bitronix進行JTA 事務的啟動器 Pom
spring-boot-starter-social-twitter 使用Spring Social Twitter的啟動器 Pom
spring-boot-starter-data-rest 通過使用Spring Data REST在REST上暴露Spring資料庫的啟動器 Pom

表13.2 Spring Boot生產環境啟動器

名稱 描述 Pom
spring-boot-starter-actuator 使用Spring Boot Actuator提供生產準備功能,可幫助您監控和管理應用程式的啟動器