SpringBoot 基礎知識學習(一)——快速入門

ldear發表於2017-08-31

一、背景介紹

         今天是2016年11月15號,接觸微服務大概一年多的時間,並且我們團隊已經在去年使用微服務架構搭建我們數字化企業雲平臺,同時在這塊也投入了很多時間去學習和研究,有一些經驗和學習心得,可以和大家一起分享與學習,提到微服務我們可能會想到許多熱門的知識點,比如spring Boot、Docker、k8s、restful、持續交付、分散式事務,服務拆分等等,接下來我會給大家分享Spring Boot相關的系列知識,同時歡迎大家留言共同討論,指出不足之處。

         相信大部分學習Java的人都會這樣的經歷,在你第一次接觸和學習spring框架的時候,在感嘆它的強大同時也會其繁雜的配置拍桌而起,“我”明明配置和視訊講述的一樣,為啥我的不能執行呢(然後一些人退卻啦)?即使你熟悉了Spring,也會因為一堆反覆黏貼xml配置而煩惱,然後有一批聰明人出現,Spring annotation出現極大簡化了配置,簡化了spring學習曲線,但是攔截器,監聽器,事務,資料庫連線等還是進行配置。然而,人類對於技術追求是無止境,如實就有人想到如果spring不存在xml配置多好?那麼很高興告訴你,它已經出現,它叫Spring Boot。

         什麼是Spring Boot呢?官網是這麼說的“Spring Boot makes it easy to create stand-alone, production-gradeSpring based Applications that you can “just run”. ”,大致的意思是:Spring Boot使我們更容易去建立基於Spring的獨立和產品級的可以”即時執行“的應用和服務。支援約定大於配置,目的是儘可能快地構建和執行Spring應用。Spring Boot的主要優點:

(1)    為所有Spring開發者更快的入門;

(2)    開箱即用,提供各種預設配置來簡化專案配置;

(3)    提供一系列的非功能性的功能,是常見的大型類的專案(例如:內嵌式容器、安全、健康檢查等)

(4)    沒有冗餘程式碼生成和XML配置的要求

二、快速入門例項

         本例項是快速開發一個“Hello World”Web應用程式,通過這個例子對Spring Boot有一個初步的瞭解,並體驗其結構簡單、開發快速的特性。除了傳統的使用IDEA或者Eclipse建立專案外,SpringBoot提供使用SPRINGINITIALIZR工具(https://start.spring.io)產生基礎專案(選擇Spring Boot版本以及其他選項,然後下載即可),專案範例原始碼下載地址為:https://github.com/dreamerkr/SpringBoot, 具體如下圖所示:


(1)   專案結構簡介

        我這裡是自己手動建立專案,不過和上面Spring提供的工具建立是一樣的效果,建立好的專案結構如下所示:


主要有java、resources、test三目錄,分別是程式入口、配置檔案和測試入口,使用DemoApplication和DemoApplicationTests類均可以啟動專案,通過觀察啟動日誌發現使用很多的預設設定,具體如下圖所示:


(2)   pom.xml檔案簡介

        此檔案引入了三個模組分別是starter(核心模組,包括自動配置支援、日誌和YAML)、starter-test(測試模組,包括JUnit、Hamcrest、Mockito)、starter-web(Web模組,包括SpringMVC、Tomcat),具體程式碼如下所示:

  1. <span style="font-size:14px;">    <parent>  
  2.         <groupId>org.springframework.boot</groupId>  
  3.         <artifactId>spring-boot-starter-parent</artifactId>  
  4.         <version>1.3.5.RELEASE</version>  
  5.     </parent>  
  6.    
  7.     <dependencies>  
  8.         <dependency>  
  9.             <groupId>org.springframework.boot</groupId>  
  10.             <artifactId>spring-boot-starter</artifactId>  
  11.         </dependency>  
  12.         <dependency>  
  13.             <groupId>org.springframework.boot</groupId>  
  14.             <artifactId>spring-boot-starter-web</artifactId>  
  15.         </dependency>  
  16.         <dependency>  
  17.             <groupId>org.springframework.boot</groupId>  
  18.             <artifactId>spring-boot-starter-test</artifactId>  
  19.             <scope>test</scope>  
  20.         </dependency>  
  21.     </dependencies></span>  

(3)   編寫HelloController類

           HelloController類的內容如下:

  

  1. package com.primeton.springbootlesson1;  
  2.   
  3. import org.springframework.web.bind.annotation.RequestMapping;  
  4. import org.springframework.web.bind.annotation.RestController;  
  5.   
  6. /** 
  7.  *  
  8.  * TODO 此處填寫 class 資訊 
  9.  * 
  10.  * @author wangzhao (mailto:wangzhao@primeton.com) 
  11.  */  
  12. @RestController  
  13. public class HelloController {  
  14.   
  15.     @RequestMapping("/hello")  
  16.     public String sayHello(){  
  17.         return "Hello World";  
  18.     }  
  19. }  

(4)   編寫單元測試用例

         DemoApplicationTests類程式碼如下所示:

  1. import static org.hamcrest.Matchers.equalTo;  
  2. import staticorg.springframework.test.web.servlet.result.MockMvcResultMatchers.content;  
  3. import staticorg.springframework.test.web.servlet.result.MockMvcResultMatchers.status;  
  4.    
  5. import org.junit.Before;  
  6. import org.junit.Test;  
  7. import org.junit.runner.RunWith;  
  8. import org.springframework.boot.test.SpringApplicationConfiguration;  
  9. import org.springframework.http.MediaType;  
  10. import org.springframework.mock.web.MockServletContext;  
  11. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  12. import org.springframework.test.context.web.WebAppConfiguration;  
  13. import org.springframework.test.web.servlet.MockMvc;  
  14. import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;  
  15. import org.springframework.test.web.servlet.setup.MockMvcBuilders;  
  16.    
  17. @RunWith(SpringJUnit4ClassRunner.class)  
  18. @SpringApplicationConfiguration(classes = MockServletContext.class)  
  19. @WebAppConfiguration  
  20. public class DemoApplicationTests {  
  21.    
  22.     private MockMvc mockMvc;  
  23.      
  24.     @Before  
  25.     public void setUp(){  
  26.         mockMvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();  
  27.     }  
  28.    
  29.     @Test  
  30.     public void getHello() throws Exception {  
  31.         mockMvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))  
  32.                 .andExpect(status().isOk())  
  33.                 .andExpect(content().string(equalTo("Hello World")));  
  34.     }  
  35. }  


(5)   啟動執行範例

         執行DemoApplication主程式,然後開啟瀏覽器訪問http://localhost:8080/hello,頁面顯示如下圖所示:

相關文章