1. 程式人生 > >Spring Boot 成長之路(一) 快速上手

Spring Boot 成長之路(一) 快速上手

啟動引導 pom.xml relative 技術 build sans hot clas 1.2

1.創建工程

利用IntelliJ IDEA新建一個Spring Boot項目的Web工程

技術分享

技術分享

技術分享

技術分享

2.查看初始化的spring boot項目

工程建好之後會出現如下的目錄結構:

技術分享

值得註意的第一件事是,整個項目結構遵循傳統Maven項目的布局,即主要應用程序代碼位於src/main/java目錄裏,資源都在src/main/resources目錄裏,測試代碼則在src/test/java目錄裏。此刻還沒有測試資源,但如果有的話,要放在src/test/resources裏。
再進一步,你會看到項目裏還有不少文件。

  • pom.xml:Maven構建說明文件。
  • SpringBootHelloworldApplication
    :應用程序的啟動引導類(bootstrap class),也是主要的Spring配置類。
  • application.properties:用於配置應用程序和Spring Boot的屬性。
  • SpringBootHelloworldApplicationTests:一個基本的集成測試類。

先讓我們來看看SpringBootHelloworldApplication

2.1 啟動引導Spring

SpringBootHelloworldApplication在Spring Boot應用程序裏有兩個作用:配置和啟動引導。首先,這是主要的Spring配置類。雖然Spring Boot的自動配置免除了很多Spring配置,但你還需要進行少量配置來啟用自動配置。

package com.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootHelloworldApplication {

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

  @SpringBootApplication開啟了Spring的組件掃描和Spring Boot的自動配置功能。實際上,@SpringBootApplication將三個有用的註解組合在了一起。

  • Spring的@Configuration:標明該類使用Spring基於Java的配置。雖然本書不會寫太多配置,但我們會更傾向於使用基於Java而不是XML的配置。
  • Spring的@ComponentScan:啟用組件掃描,這樣你寫的Web控制器類和其他組件才能被自動發現並註冊為Spring應用程序上下文裏的Bean。本章稍後會寫一個簡單的Spring MVC控制器,使用@Controller進行註解,這樣組件掃描才能找到它。
  • Spring Boot 的@EnableAutoConfiguration : 這個不起眼的小註解也可以稱為@Abracadabra,就是這一行配置開啟了Spring Boot自動配置的魔力,讓你不用再寫成篇的配置了。

  在Spring Boot的早期版本中,你需要在ReadingListApplication類上同時標上這三個註解,但從Spring Boot 1.2.0開始,有@SpringBootApplication就行了。
  如我所說,SpringBootHelloworldApplication還是一個啟動引導類。要運行Spring Boot應用程序有幾種方式,其中包含傳統的WAR文件部署。但這裏的main()方法讓你可以在命令行裏把該應用程序當作一個可執行JAR文件來運行。這裏向SpringApplication.run()傳遞了一個
SpringBootHelloworldApplication類的引用,還有命令行參數,通過這些東西啟動應用程序。

  實際上,就算一行代碼也沒寫,此時你仍然可以構建應用程序嘗嘗鮮。

  應用程序應該能正常運行,啟動一個監聽8080端口的Tomcat服務器。要是願意,你可以用瀏覽器訪問http://localhost:8080,但由於還沒寫控制器類,你只會收到一個HTTP 404(NOT FOUND)錯誤,看到錯誤頁面。在本章結束前,這個URL將會提供一個閱讀列表應用程序。
  你幾乎不需要修改SpringBootHelloworldApplication.java。如果你的應用程序需要Spring Boot自動配置以外的其他Spring配置,一般來說,最好把它寫到一個單獨的@Configuration標註的類裏。(組件掃描會發現並使用這些類的。)極度簡單的情況下,可以把自定義配置加入SpringBootHelloworldApplication.java。

2.2. 配置應用程序屬性
  Initializr為你生成的application.properties文件是一個空文件。實際上,這個文件完全是可選的,你大可以刪掉它,這不會對應用程序有任何影響,但留著也沒什麽問題。
  稍後,我們肯定有機會向application.properties裏添加幾個條目。但現在,如果你想小試牛刀,
  可以加一行看看:
    server.port=8000
  加上這一行,嵌入式Tomcat的監聽端口就變成了8000,而不是默認的8080。你可以重新運行應用程序,看看是不是這樣。
  這說明application.properties文件可以很方便地幫你細粒度地調整Spring Boot的自動配置。你還可以用它來指定應用程序代碼所需的配置項。在第3章裏我們會看到好幾個例子,演示application.properties的這兩種用法。
  要註意的是,你完全不用告訴Spring Boot為你加載application.properties,只要它存在就會被加載,Spring和應用程序代碼都能獲取其中的屬性。
  我們差不多已經把初始化的項目介紹完了,還剩最後一樣東西,讓我們來看看Spring Boot應用程序是如何構建的。

3.創建pom.xml文件

3.1 設置spring boot的parent

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

Spring boot的項目必須要將 parent設置為 spring boot的 parent,該 parent包含了大量默認的配置。

3.2 導入spring boot的web支持

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

3.3 添加spring boot插件

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

工程創建好了之後,會生成默認的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.cloud</groupId>
    <artifactId>spring-boot-helloworld</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>spring-boot-helloworld</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

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

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

4.HelloWorld實戰詳解

4.1 Controller層

HelloWorldController的代碼如下:

package com.cloud;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* Created by peter on 2017-10-09.
*/
@RestController
public class HelloWorldController {
@RequestMapping("/")
public String sayHello(){
return "Hello,World!";
}
}

@RestController和@RequestMapping註解是來自SpringMVC的註解,它們不是SpringBoot的特定部分。

(1). @RestController:提供實現了REST API,可以服務JSON,XML或者其他。這裏是以String的形式渲染出結果。

(2). @RequestMapping:提供路由信息,"/“路徑的HTTP Request都會被映射到sayHello方法進行處理。

4.2 啟動應用類

和第一段描述一樣,開箱即用。如下面Application類:

package com.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootHelloworldApplication {

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

(1). @SpringBootApplication:Spring Boot 應用的標識

(2). Application很簡單,一個main函數作為主入口。SpringApplication引導應用,並將Application本身作為參數傳遞給run方法。具體run方法會啟動嵌入式的Tomcat並初始化Spring環境及其各Spring組件。

4.3 Controller層測試類

一個好的程序,不能缺少好的UT。針對HelloWorldController的UT如下:

package com.cloud;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import static org.junit.Assert.assertEquals;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootHelloworldApplicationTests {

    @Test
    public void testSayHello() {
        assertEquals("Hello,World!",new HelloWorldController().sayHello());
    }

}

4.4 運行

直接編譯運行代碼,然後訪問 http://localhost:8080/ ,即可在頁面中看到Spring Boot對你 say hello:

Hello,World!

Spring Boot 成長之路(一) 快速上手