Mock平台2-Java Spring Boot框架基礎知識

微信搜索【大奇測試開】,關注這個堅持分享測試開發乾貨的傢伙。

認識Spring Boot

在N年前的大學時代想要開發一個Web服務使用的還是SSH框架(struts+spring+hibernate)尤其是Spring這塊需要進行大量的配置工作,為了簡化應用搭建和開發過程出現了Sprint Boot全新開源框架,且功能更加豐富,性能上更加穩定健壯,還提供了大量開箱即用(out-of-the-box)的依賴模組,使用起來更加簡單高效,尤其是這幾年在互聯網微服務的應用上熱度很高。

特性

  • 獨立的 Spring 應用程式
  • 直接嵌入 Tomcat、Jetty 或 Undertow等容器(無需部署 WAR 文件)
  • 提供 ‘starter’ 核心簡化構建配置
  • 儘可能多的自動配置 Spring 和 3rd 方庫
  • 提供已集成的產品功能,例如指標、健康檢查和外部化配置
  • 完全無需程式碼生成,無需 XML 配置

Starter

Sprint Boot真正少量配置甚至零配置使用各種組件的核心,它將日常應用研發中的各種場景都抽取出來做成獨立的 starter(啟動器),使用的時只需要在 Maven 中引入 starter 依賴,SpringBoot 就能自動掃描到要載入的資訊並啟動相應的默認配置。當然也可以自定義修改配置,除了官方Starter還有第三方技術提供,更可以自己開發。

 

總之在個人開發體驗上來說,在如此簡單高效+JAVA語言穩定開發的特性下,對於獨立Server的服務應用開發相比Python我更願意用Spring Boot 框架進行開發,下面就參考官方給出一個Demo實例。

 

不過開始實踐之前還需要注意以下幾點

  1. 本篇適合有一點JAVA語言基礎的小白,以前寫過Spring Boot項目的可忽略看後續開發篇文章
  2. 系列文章不做技術展開和深入講解,只做到應用的層面的講解
  3. 示例和項目開發需要提前搭建好依賴環境
    1. 環境: Java JDK 1.8.x 、Maven 3.x
    2. 資料庫:Myql 5.7+
    3. IDE:IntelliJ IDEA / Eclipse

搭建一個API項目

項目創建

初始化一個Spring Boot 應用兩種方式,官方IDE 

方式一:官方初始化項目包

Step1. 通過訪問 //start.spring.io/ 選擇開發選項和添加依賴包一鍵生成應用包。

注意本地JDK裝的是1.8.X版本,所有Java的選項需要改成8,然後點擊GENERATE就會自動下載一個按照選項配置生成的項目包。

 

Step2. 解壓到某路徑下,打開IDEA導入項目,選擇到 pom.xml -> Open As Project -> Trust Project 導入包後等待maven依賴下載入完成。

 

方式二:IDEA創建Sprint Boot

新建一個項目(如果IDEA是最新版,請在上一個項目中File->Close project 才會進入到項目管理窗口),New Project -> Spring Initializr 選項內容如圖所示。

 

下一步Next 選擇版本和添加依賴,點擊Finish完成創建。

 

最終兩種方式都會創建出如下的結構的 Spring Boot 應用項目

  

目錄結構說明

|-/src/mian/java 主開發程式碼和程式入口

|-/src/mian/resources 配置或靜態文件資源區

|-/src/mian/resources/application.properties默認屬性配置文件

|-/src/test 測試程式碼和測試初始化入口

|-pom.xml應用Maven等配置文件

 

依賴包說明

  • spring-boot-starter-web 開發Web應用的模組
  • spring-boot-starter-actuator 程式監控器模組
  • spring-boot-starter-test 默認引用 測試模組 如JUnit
  • spring-boot-starter 默認引用核心模組,如果引用了starter-web此依賴自動包含在其中,可以不在項目中顯示引用。 

實際開發中還會為創建不同模式的目錄結構比如MVC,其他的依賴包添加也都會像圖中選中部分一樣方式隨時添加即可。

項目運行

依賴全部初始化完成後,其實暫時不需要編寫任何程式碼就能運行,直接點擊IDEA的工具欄Run或Debug按鈕。

 

或通過 Terminal 執行 Maven命令行運行應用。

mvnw spring-boot:run

因為一開始添加了監控依賴包,所以可以直接訪問這個介面 //localhost:8080/actuator 看到一些可訪問的介面,選擇 /health 健康檢查看下服務狀態為 UP 服務正常。

 

編寫程式碼

接下來開發第一個自己的介面,在 /src/mian/java 先創建個資源返回類 HelloEntity.java用於JSON格式的數據返回,code 表示狀態碼,content表示內容。

package com.daqi.ideademo;

public class HelloEntity {
    private Integer code;
    private String content;
    
    public HelloEntity(Integer code, String content) {
        this.code = code;
        this.content = content;
    }
    
    public long getCode() {
        return code;
    }
    
    public String getContent() {
        return content;
    }
}

 

再創建一個控制器類,用於實現API Web服務,識別處理HTTP請求通過 @RestController包含@Controller@ResponseBody )註解標記為控制類,通過@GetMapping 註解標記GET方法請求,並給定一個介面路徑。

package com.daqi.ideademo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/api/sayHello")
    public HelloEntity sayHello(@RequestParam(value = "content") String content){
        String respContent = "你好,".concat(content);
        return new HelloEntity(200, respContent);
    }
}

@RequestParam指定了一個介面請求Params參數,sayHello程式碼中返回code=200,content=格式化接收參數的內容字元串。

 

以上內容不必過多糾結,後邊的分享中在用到的時候都會進行講解,這塊內容照著做有個整體印象即可

運行和測試

 

 

在運行程式之前先對入口程式做個簡單解釋說明

@SpringBootApplication是一個複合注釋,包含以下內容:

  • @Configuration: 將類標記為應用程式上下文的 bean 源。
  • @EnableAutoConfiguration:告訴 Spring Boot 根據類路徑設置、其他 bean 和各種屬性設置開始添加 bean。例如,如果spring-webmvc位於類路徑上,則此注釋將應用程式標記為 Web 應用程式並激活關鍵行為,例如設置DispatcherServlet.
  • @ComponentScan: 開啟自動掃描功能,告訴 Spring 在包中查的組件、配置和服務

其中 main() 方法使用 Spring Boot 的SpringApplication.run()方法來啟動應用程式。

 

介面測試

重新執行 mvnw spring-boot:run或 IDEA 運行按鈕,編譯重啟服務,通過PostMan做個介面帶參請求測試。

 

 測試結果如圖,正確按照預期給予返回結果。

 

至此一個簡單的後端服務就搞定了,你學會了嗎?如果著急想提前惡補 JAVA Spring Boot 知識的,推薦一個專項學習導航網站,最後希望你學過後有所收穫,未來不斷成長,喜歡就多多支援實戰原創吧!

 

推薦學習

Spring Boot 學習導航 //springboot.fun/

資料參考

[1] //spring.io/guides/gs/rest-service/

[2] //www.ityouknow.com/spring-boot.html

關於後續更多進展和分享歡迎持續關注公眾號或部落格。