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應用程序的開發就結束了。接下來再學習其它方面的知識內容。

0 條評論,你可以發表評論,我們會進行改進
Comment author placeholder