天天看點

第一個Spring Boot應用(Hello World)

本文将介紹如何安裝和使用Spring Boot CLI,如何建立第一個Spring Boot應用程式,通過本文的學習讀者将會對Spring Boot的内部工作原理有一些了解,對Spring Boot這項令人瘋狂的技術有一個更好的畫像。

你可以通過Spring Boot指令行接口(CLI)或者Maven,Gradle甚至是Apache Ant建立Spring Boot應用。本文将會一步一步的描述使用Spring Boot,需要在你的環境當中做那些設定。

安裝Spring Boot CLI

在安裝CLI之前,非常有必要先檢查您是否已經安裝了Java JDK,因為我們的執行個體所使用的是Spring Boot 2.0.0.M5版本,是以你必須在你的電腦中安裝JDK 1.8或者以上版本。如何安裝JDK本文不再贅述,讀者可自行百度安裝。

有很多種工具可以幫助讀者安裝Spring Boot CLI,本文隻描述如何在Windows環境中安裝,如果您是在其他作業系統中操作,請參考官方文檔進行安裝(https://docs.spring.io/spring-boot/docs/2.0.0.M5/reference/htmlsingle/#getting-started-installing-the-cli)。

在windows環境下,隻需要下載下傳Spring Boot CLI的zip壓縮包,解壓到指定檔案夾,然後在環境變量Path中配置解壓的Spring Boot CLI的bin目錄即可,下載下傳連結如下。

http://repo.spring.io/milestone/org/springframework/boot/spring-boot-cli/2.0.0.M5/spring-boot-cli-2.0.0.M5-bin.zip

下載下傳完成,解壓之後目錄結構如下;

第一個Spring Boot應用(Hello World)

在環境變量的Path中添加bin所在的目錄

第一個Spring Boot應用(Hello World)

一切就緒之後,在指令行中,輸入如下指令可檢視具體的Spring Boot CLI版本資訊

spring --version
Spring CLI v2.M5
           

使用 Maven

如果您已經使用過Maven作為編譯、測試、建構項目的工具的話,在Spring Boot中您也可以使用Maven。

在合适的檔案目錄下建立一個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>
        <!-- Spring Boot Parent Dependencies-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.M5</version>
    </parent>
    <dependencies>
                <!-- Add dependencies: starter poms -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
            </repository>
            <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>
           

上面的代碼片所展示的是Spring Boot最小的pom.xml配置,仔細看你會發現有一個<parent/>标簽,在這個标簽中你需要包含了一個spring-boot-starter-parent項目。這個特殊的依賴包含了應用運作需要的所有資訊,它包含了Spring Boot應用所必須的類似于Spring FrameWork(spring-core)、Spring Test(spring-test)等基礎依賴的依賴描述。你隻需要使用這個parent pom就能完成所有的依賴描述添加工作。

另外一部分是starter poms,這個部分定義了使用者實際所需要使用的Spring Boot依賴。上面的代碼段給出的是spring-boot-starter-web依賴,添加這個依賴之後就可以建立一個web應用程式。starter poms部分可以引入所有需要在實際項目中使用的依賴。

...
<dependencies>
    <!-- Add dependencies: starter poms -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
...
           

spring-boot-starter-web依賴包含所有的spring-core, spring-web, spring-webmvc,嵌入的Tomcat

server和其他web應用相關的庫。

第一個Spring Boot應用(Hello World)

以上所描述的都是一些基礎工作,接下來我們開發一個簡單的“Hello Word”應用來強調一些Spring Boot的關鍵特性。我們将會使用Maven作為建構工具來建構項目。

本執行個體需要讀者自行建立目錄,開始本執行個體之前我們假設讀者已經建立好了自己的目錄并且已經進入該目錄。

建立pom.xml

建立一個pom.xml檔案,這個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>
        <!-- Spring Boot Parent Dependencies-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.M5</version>
    </parent>
    <dependencies>
                <!-- Add dependencies: starter poms -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
            </repository>
            <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>
           

在我們的pom.xml中,我們添加了spring-boot-starter-web依賴。

寫代碼

要完成我們的應用,我們就需要建立一個單獨的java檔案,在預設情況下,Maven将會從src/main/java目錄下編譯資源檔案,是以你需要建立你自己的目錄結構,然後添加src/main/java/Hello.java:

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Hello {
    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

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

雖然我們代碼并不多,但是我們還是需要對這段代碼進行一些必要的解釋。

  • @RestController:這是一個構造型(stereotype) 注解,顧名思義,該注解是@Controller和@ResponseBody的結合體,兩個标注合并起來的作用。@RestController注解告訴Spring直接渲染結果字元串傳回給調用者。對于Spring來講,這個類扮演了一個特殊的角色,在本案中,我們的類是一個Web @Controller,是以當處理進來的web請求時, Spring會詢問它。
  • @RequestMapping:此注解提供的是路由資訊。它告訴Spring任何來自“/”路徑的請求都會被映射到home方法。
  • @EnableAutoConfiguration:這個注解告訴Spring Boot去“猜測(guess)”需要如何配置Spring,主要基于pom.xml中所添加的jar依賴。由于 spring-boot-starter-web 添加了Tomcat和Spring MVC, 是以auto-configuration将假定你正在開發一個web應用并相應地對Spring進行設定。

main方法

我們的應用程式最後部分是main方法。 這隻是一個标準的方法, 它遵循Java對于一個應用程式入口點的約定。 我們的main方法通過調用run, 将業務委托給了Spring Boot的SpringApplication類。 SpringApplication将引導我們的應用, 啟動Spring, 相應地啟動被自動配置的Tomcat web伺服器。 我們需要将 Hello.class 作為參數傳遞給run方法來告訴SpringApplication誰是主要的Spring元件。 為了暴露任何的指令行參數, args數組也會被傳遞過去。

運作應用

到此我們的應用應該可以工作了。 由于使用了 spring-boot-starter-parent POM, 這樣我們就有了一個非常有用的run目标,我們可以用它啟動程式。 在項目根目錄下輸入 mvn spring-boot:run 來啟動應用:

第一個Spring Boot應用(Hello World)

在浏覽器中輸入 http://localhost:8080/,得到如下結果;

第一個Spring Boot應用(Hello World)

繼續閱讀