1. 程式人生 > >筆記:Spring Boot 項目構建與解析

筆記:Spring Boot 項目構建與解析

用例方法 部署 點擊 restful repos new mockito let 源碼

構建 Maven 項目

  • 通過官方的 Spring Initializr 工具來產生基礎項目,訪問 http://start.spring.io/ ,如下圖所示,該頁面提供了以Maven構建Spring Boot 項目的功能。

    技術分享

  • 選擇構建工具 Maven Project,Spring Boot 版本選擇 1.5.4,填寫 Group 和 Artifact 信息,在Search for dependencies 中可以搜索需要的其他依賴包,這裏我們需要實現 RESTful API,所以可以添加 Web 依賴。
  • 點擊 Generate Project 按鈕下載項目的壓縮包,並且解壓項目包
  • 使用 IDE 導入項目,以 Intellij IDEA 14 為例,從菜單中選擇 File->New->Project from Existing Sources…,選擇解壓的項目文件夾 的 POM.xml 文件,並點擊 OK 按鈕,一直點擊 Next ,這樣我們就創建了一個最基礎的Spring Boot 工程

工程結構解析

技術分享

如上圖所示,Spring Boot 的基礎結構有三大塊(具體路徑根據用戶生成項目時填寫的Group和Artifact有所差異)

  • src/main/java:主程序入口 SpringbootDemoApplication,可以通過直接運行該類來啟動 Spring Boot應用
  • src/main/resources:配置目錄,該目錄用來存放應用的一些配置信息,比如應用名、服務端口、數據庫配置等。由於我們應用了Web模塊,因此產生了 static目錄與templates目錄,前者用於存放靜態資源,如圖片、CSS、JavaScript等;後者用於存放Web頁面的模板文件。
  • src/test:單元測試目錄,生成的 SpringbootDemoApplicationTests 通過 JUnit4實現,可以直接用運行 Spring Boot應用的測試。

Maven配置分析

打開當前工程下的 pom.xml 文件,可以看到如下關鍵配置:

  • 設置當前項目的父項目,配置如下

????????<parent>

????????????????<groupId>org.springframework.boot</groupId>

????????????????<artifactId>spring-boot-starter-parent</artifactId>

????????????????<version>1.5.4.RELEASE</version>

????????????????<relativePath/> <!-- lookup parent from repository -->

????????</parent>

  • 設置項目源碼文件的編碼和JDK版本,配置如下

????????<properties>

????????????????<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

????????????????<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

????????????????<java.version>1.8</java.version>

????????</properties>

  • 設置項目依賴,spring-boot-starter-web 項目為全棧Web開發模塊,包含嵌入式 Tomcat、Spring MVC;spring-boot-starter-test項目為通用測試模塊,包含 JUnit、Hamcrest、Mockito 配置如下

????????<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>

實現 RESTful API

在Spring Boot 中創建一個RESTFul API 的實現代碼同 Spring MVC一樣,只是不需要Spring MVC那樣先做很多配置,步驟如下:

  • 新建 HelloController 類,代碼如下:

    @RestController

    public class HelloController {

    ????????@RequestMapping ("/hello")

    ????????public String index() {

    ????????????????return "Hello World";

    ????????}

    }

  • 啟動應用,通過 http://localhost:8080/hello ,我們可以看到返回了預期的結果:Hello World

啟動 Spring Boot 應用

啟動 Spring Boot 應用的方式很多種:

  • 作為一個Java應用程序,可以直接通過運行擁有的main函數的類來啟動
  • 在服務器上部署運行時,通常先使用 mvn install 將應用打包成 jar包,再通過 java -jar xxx.jar 來啟動應用

編寫單元測試

在Spring Boot 中實現單元測試很方便,我們打開 src/test 下的單元測試入口 SpringbootDemoApplicationTests 類,編寫一個簡單的單元測試來模擬 HTTP 請求,測試代碼如下:

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.http.MediaType;

import org.springframework.test.context.junit4.SpringRunner;

import org.springframework.test.web.servlet.MockMvc;

import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;

import org.springframework.test.web.servlet.setup.MockMvcBuilders;

? ?

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

? ?

@RunWith (SpringRunner.class)

@SpringBootTest

public class SpringbootDemoApplicationTests {

? ?

????????private MockMvc mvc;

? ?

????????@Before

????????public void setUp() {

????????????????mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();

????????}

? ?

????????@Test

????????public void helloTest() throws Exception {

????????????????mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON_UTF8))

????????????????????????????????.andExpect(status().isOk())

????????????????????????????????.andExpect(content().string("Hello World"));

????????}

? ?

}

代碼解析如下:

  • @RunWith (SpringRunner.class):引入Spring 對JUnit4的支持
  • MockMvc 對象:用於模擬調用 Controller 的接口發起請求,在 helloTest 測試用例方法中,perform 函數執行一次請求調用,accept 用於執行接收的數據類型,andExpect 用於判斷接口返回的期望值
  • @Before:JUnit中定義在測試用例 @Test 內容執行前預加載的內容,這裏用於初始化 MockMvc 實例

? ?

? ?

筆記:Spring Boot 項目構建與解析