微信搜尋【大奇測試開】,關注這個堅持分享測試開發乾貨的傢伙。
認識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例項。
不過開始實踐之前還需要注意以下幾點:
- 本篇適合有一點JAVA語言基礎的小白,以前寫過Spring Boot專案的可忽略看後續開發篇文章
- 系列文章不做技術展開和深入講解,只做到應用的層面的講解
- 示例和專案開發需要提前搭建好依賴環境
- 環境: Java JDK 1.8.x 、Maven 3.x
- 資料庫:Myql 5.7+
- IDE:IntelliJ IDEA / Eclipse
搭建一個API專案
專案建立
初始化一個Spring Boot 應用兩種方式,官方 和 IDE
方式一:官方初始化專案包
Step1. 通過訪問 https://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
預設引用 測試模組 如JUnitspring-boot-starter
預設引用核心模組,如果引用了starter-web此依賴自動包含在其中,可以不在專案中顯示引用。
實際開發中還會為建立不同模式的目錄結構比如MVC,其他的依賴包新增也都會像圖中選中部分一樣方式隨時新增即可。
專案執行
依賴全部初始化完成後,其實暫時不需要編寫任何程式碼就能執行,直接點選IDEA的工具欄Run或Debug按鈕。
或通過 Terminal 執行 Maven命令列執行應用。
mvnw spring-boot:run
因為一開始新增了監控依賴包,所以可以直接訪問這個介面 http://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 學習導航 http://springboot.fun/
資料參考
[1] https://spring.io/guides/gs/rest-service/
[2] http://www.ityouknow.com/spring-boot.html
關於後續更多進展和分享歡迎持續關注公眾號或部落格。