Spring Boot 參考指南(開發你的第一個Spring Boot應用程序)

11. 開發你的第一個Spring Boot應用程序

本節描述如何開發一個簡單的「Hello World!」 web應用程序來突出了Spring Boot的一些關鍵特性,咱們使用Maven來構建這個項目,由於大多數IDE都支持它。html

spring.io網站包含許多使用Spring Boot的「 入門」指南,若是你須要解決一個具體的問題,先檢查一下。
你能夠經過使用 start.spring.io和從依賴關係搜索器中選擇「Web」啓動器來快捷地完成如下步驟,這樣作會生成一個新的項目結構,這樣你就能夠 當即開始編寫代碼,查看 Spring Initializr文檔瞭解更多細節。

在開始以前,打開一個終端並運行如下命令,以確保安裝了有效的Java和Maven版本:java

$ 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.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_102, vendor: Oracle Corporation
此示例須要在其本身的文件夾中建立,隨後的指令假設你已經建立了一個合適的文件夾,而且它是你當前的目錄。

11.1 建立POM

咱們須要先建立一個Maven pom.xml文件,pom.xml是用於構建項目的,打開你最喜歡的文本編輯器並添加如下內容:git

<?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>2.0.5.RELEASE</version>
  </parent>
  <!-- Additional lines to be added here... -->
</project>

前面的清單應該給你一個工做構建,你能夠經過運行mvn package來測試它(如今,你能夠忽略「jar will be empty - no content was marked for inclusion!」的警告)。github

此時,你能夠將項目導入到IDE中(大多數現代Java IDE都包含對Maven的內置支持),爲了簡單起見,咱們繼續使用這個示例的純文本編輯器。

11.2 添加類路徑依賴

Spring Boot提供了一些「Starters」,可讓你將jar添加到類路徑中,咱們的示例應用程序已經在POM的父部分使用了spring-boot-starter-parentspring-boot-starter-parent是一個特殊的starter,它提供有用的Maven默認值,它還提供了一個dependency-management部分,以便你能夠「幸福」的省略依賴項的version標記。web

其餘「Starters」提供了在開發特定類型的應用程序時可能須要的依賴項,因爲咱們正在開發一個web應用程序,因此咱們添加了一個spring-boot-starter-web依賴項。在此以前,咱們能夠經過運行如下命令查看當前所擁有的內容:spring

$ 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依賴項當即添加到parent部分下面:apache

<dependencies>
 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId> 
 </dependency>
</dependencies>

若是你再次運行mvn dependency:tree,你會看到如今有許多額外的依賴項,包括Tomcat web服務器和Spring Boot自己。segmentfault

11.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) throws Exception {       
     SpringApplication.run(Example.class, args);
  }
}

雖然這裏沒有多少代碼,但仍有不少工做要作,咱們將在接下來的幾節中討論重要的部分。瀏覽器

11.3.1 @RestController和@RequestMapping註解

在咱們的Example類上的第一個註解是@RestController,這被稱爲構造型註解,它爲閱讀代碼的人們提供了一些提示,而且爲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和自動配置

自動配置被設計成與「Starters」很好地工做,可是這兩個概念並無直接關聯。你能夠自由地挑選和選擇除starters以外的jar依賴項,Spring Boot仍然盡力自動配置你的應用程序。

11.3.3 「Main」方法

咱們的應用程序的最後一部分是main方法,這只是遵循應用程序入口點的Java約定的標準方法。咱們的main方法經過調用run委託給Spring Boot的SpringApplication類,SpringApplication引導咱們的應用程序啓動Spring,而Spring又啓動了自動配置的Tomcat web服務器。咱們須要經過Example.class做爲run方法的參數,以告訴SpringApplication它是主Spring組件,args數組也被傳遞,以公開任何命令行參數。

11.4 運行樣例

此時,你的應用程序應該能夠工做了,由於你使用了spring-boot-starter-parentPOM,因此你有一個有用的run目標,你可使用它來啓動應用程序。類型mvn spring-boot:run從根項目目錄運行,以啓動應用程序,你應該會看到相似以下的輸出:

$ mvn spring-boot:run
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.0.5.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依賴項。

可執行jar和Java

Java沒有提供加載嵌套jar文件的標準方法(jar文件自己包含在一個jar中)。
若是你但願分發一個自包含的應用程序,這可能會有問題。

爲了解決這個問題,許多開發人員使用「uber」jar,一個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-parentPOM包括 <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:2.0.5.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

若是查看target目錄,應該會看到myproject-0.0.1-snapshot.jar,文件的大小應該在10MB左右,若是你想查看內部,可使用jar tvf,以下所示:

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

你還應該看到一個更小的文件,名爲myproject-0.0.1-snapshot.jar.originaltarget目錄中,這是Maven在Spring Boot從新打包以前建立的原始jar文件。

要運行該應用程序,請使用java -jar命令,以下所示:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.0.5.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 repository也有一些你能夠運行的示例,這些示例與代碼的其他部分無關(也就是說,你不須要構建其他的代碼來運行或使用示例)。


上一篇:安裝 Spring Boot

下一篇:構建系統

相關文章
相關標籤/搜索