Spring Boot教學
Spring Boot是什麼?
Spring Boot簡介
Spring Boot主要目標
Spring Boot快速入門
新項目爲什麼需要Spring Boot?
Spring Boot引導過程
Spring Boot核心和限制
Spring Boot Tomcat部署
Spring Boot優點和缺點
Spring Boot構建系統
Spring Boot入門
Spring Boot代碼結構
Spring Boot安裝
Spring Boot Bean和依賴注入
Spring Boot應用程序開發入門
Spring Boot運行器(Runner)
Spring Boot JSP應用實例
Spring Boot應用程序屬性
Spring Boot將WAR文件部署到Tomcat
Spring Boot日誌
Spring Boot Hello World(Thymeleaf)示例
Spring Boot構建RESTful Web服務
Spring Boot非web應用程序實例
Spring Boot異常處理
Spring Boot @ConfigurationProperties實例
Spring Boot攔截器
Spring Boot SLF4J日誌實例
Spring Boot Servlet過濾器
Spring Boot Ajax實例
Spring Boot Tomcat端口號
Spring Boot文件上傳示例(Ajax和REST)
Spring Boot Rest模板
Spring Boot文件上傳示例
Spring Boot文件處理
Spring Boot服務組件
Spring Boot Thymeleaf示例
Spring Boot使用RESTful Web服務
Spring Boot CORS支持
Spring Boot國際化
Spring Boot調度
Spring Boot啓用HTTPS
Spring Boot Eureka服務器
Spring Boost Eureka服務註冊
Spring Boot Zuul代理服務器和路由
Spring Boot雲配置服務器
Spring Boot雲配置客戶端
Spring Boot Actuator
Spring Boot管理服務器
Spring Boot管理客戶端
Spring Boot啓用Swagger2
Spring Boot創建Docker鏡像
Spring Boot跟蹤微服務日誌
Spring Boot Flyway數據庫
Spring Boot發送電子郵件
Spring Boot Hystrix
Spring Boot Web Socket
Spring Boot批量服務
Spring Boot Apache Kafka
Spring Boot單元測試用例
Spring Boot Rest控制器單元測試
Spring Boot數據庫源(連接數據庫)
Spring Boot保護Web應用程序

Spring Boot應用程序開發入門

在本節中,我們來在Java中開發一個簡單的「Hello World!」 Web應用程序,突出一些Spring Boot的主要特性。在這裏將使用Maven來構建這個項目,因爲大多數IDE支持它。

在開始之前,打開一個終端,檢查是否安裝了Java和Maven的有效版本。

C:\Users\Administrator>java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

C:\Users\Administrator>mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: D:\worksp\yiibai.com\apache-maven-3.3.9
Java version: 1.8.0_65, vendor: Oracle Corporation
Java home: D:\Program Files\Java\jdk1.8.0_65\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

此示例需要在其自己的文件夾中創建。後續說明假定您已創建了一個合適的文件夾,並且它是「當前目錄」。

提示,如果還沒有安裝 Maven ,請參考安裝教程 - http://www.yiibai.com/maven/maven\_environment\_setup.html

創建POM文件

我們需要從創建一個Maven pom.xml文件開始。pom.xml是將用於構建項目的配置,在這個示例中,把它放在 D:\spring-boot\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.4.3.RELEASE</version>
    </parent>

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

</project>

它給出了一個工作構建,可以通過運行mvn package(可以忽略「**jar will be empty - no content was marked for inclusion!**」現在警告)測試它。

執行結果如下 -

Spring

此時,可以將項目導入到IDE中(最新的Java IDE包括對Maven的內置支持)。爲了簡單起見,這裏將繼續爲此示例使用純文本編輯器。

添加類路徑依賴項

Spring Boot提供了一些「啓動器」,使得容易添加 jar 到你的類路徑。在我們的示例應用程序已經在POM的父部分中使用了spring-boot-starter-parentspring-boot-starter-parent是一個特殊的啓動器,提供了有用的 Maven 默認值。 它還提供了一個依賴關係管理部分,以便您可以省略「blessed」依賴關係的 version 標籤。

其他「Starters」只是提供了在開發特定類型的應用程序時可能需要的依賴關係。由於我們正在開發一個web應用程序,將添加一個spring-boot-starter-web依賴關係。

$ mvn dependency:tree

[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

執行結果如下 -

Spring

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>

完整的 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.4.3.RELEASE</version>
    </parent>

    <!-- Additional lines to be added here... -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

如果再次運行mvn dependency:tree命令,將看到現在還有許多其他依賴項,包括Tomcat Web服務器和Spring Boot本身。

編寫代碼

要完成上面的應用程序示例,我們需要創建一個單一的Java文件。Maven將默認從src/main/java編譯源代碼,所以需要創建該文件夾結構,然後添加一個名爲src/main/java/Example.java的文件,完整的文件路徑是 D:/spring-boot/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!"; // Copyright: w w w . y i I b A i.c O m 
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Example.class, args);
    }

}

雖然這裏沒有太多的代碼,但背後有很多事情正在發生。讓我們看看代碼的重要部分。

@RestController@RequestMapping註解

Example類的第一個註解是[@RestController](https://github.com/RestController "@RestController")。這稱爲構造型註釋,它爲閱讀代碼的人提供了提示,對於Spring,該類扮演了一個特定的角色。在這種情況下,這個類是一個web [@Controller](https://github.com/Controller "@Controller"),因此Spring會在處理傳入的Web請求時考慮它。

[@RequestMapping](https://github.com/RequestMapping "@RequestMapping")註解提供了「路由」信息。它告訴Spring任何帶有路徑「/」的HTTP請求應該映射到home方法。[@RestController](https://github.com/RestController "@RestController")註解告訴Spring將生成的字符串直接返回給調用者。

[@RestController](https://github.com/RestController "@RestController")[@RequestMapping](https://github.com/RequestMapping "@RequestMapping")註解是Spring MVC註釋(它們不是Spring Boot特有的)。有關更多詳細信息,請參閱Spring參考文檔中的MVC部分

@EnableAutoConfiguration註解

第二個類級別註解是[@EnableAutoConfiguration](https://github.com/EnableAutoConfiguration "@EnableAutoConfiguration")。這個註解告訴Spring Boot「猜測」將如何配置Spring,它是基於添加的jar依賴。 由於spring-boot-starter-web添加了Tomcat和Spring MVC,因此自動配置將假設正在開發一個Web應用程序並相應地設置Spring。

啓動器和自動配置(Starters & Auto-Configuration)
自動配置旨在與「Starters」配合使用,但這兩個概念不直接綁定。可以自由選擇和選擇起始者以外的jar依賴,Spring Boot仍將盡力自動配置應用程序。

「main」方法

應用程序的最後一部分是主(main)方法。 這只是一個遵循Java約定的應用程序入口點的標準方法。main方法通過調用run來委託Spring Boot SpringApplication類。SpringApplication將引導應用程序,啓動Spring,從而啓動自動配置Tomcat Web服務器。需要傳遞Example.class作爲run方法的參數來告訴SpringApplication,這是主要的Spring組件。args數組也被傳遞以暴露任何命令行參數。

運行示例

現在,我們的應用程序應該可以正常運行工作了。由於 POM 中使用了spring-boot-starter-parent,有一個有用的 run 目標,用它來啓動應用程序。輸入 mvn spring-boot:run 從根項目目錄啓動應用程序:

$ mvn spring-boot:run

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

如果打開Web瀏覽器訪問 http://localhost:8080 , 應該會看到以下輸出:

Spring

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

創建可執行jar

現在,我們來完成一個例子,創建一個完全自包含的可執行jar文件,可以在生產中運行。可執行jar(有時稱爲「fat jar」)是包含編譯的類以及需要運行的所有jar依賴性的代碼存檔。

可執行jar和Java
Java不提供任何標準方法來加載嵌套的jar文件(即包含在jar中的jar文件)。如果想要分發一個自包含的應用程序,這可能是有問題的。
爲了解決這個問題,許多開發人員使用「uber」 jar。 一個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>

現在,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.4.3.RELEASE</version>
    </parent>

    <!-- Additional lines to be added here... -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

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

</project>

POMspring-boot-starter-parent 包括<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.4.3.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.4.3.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

如果打開Web瀏覽器訪問 http://localhost:8080 , 應該會看到以下輸出:

Spring

和之前一樣,要正常退出應用程序,同時按住ctrl+c

到此,第一個 Spring Boot應用程序的開發就結束了。接下來再學習其它方面的知識內容。