原文作者:楊大仙的程式空間
Spring Cloud基于Spring Boot搭建,本小節将對Spring Boot作一個大緻的講解,讀者知道Spring Boot作用即可。
開發一個全新的項目,需要先進行開發環境的搭建,例如要确定技術架構以及版本,還要考慮各個架構之間的版本相容問題,完成這些繁瑣的工作後,還要對新項目進行配置,測試能否正常運作,最後才将搭建好的環境送出給項目組的其他成員使用。經常出現的情形是,表面上已經成功運作,但部分項目組成員仍然無法運作,項目初期浪費大量的時間做這些工作,幾乎每個項目都會投入部分工作量來做這些固定的事情。
受Ruby On Rails、Node.js等技術的影響,JavaEE領域需要一種更為簡便的開發方式,來取代這些繁瑣的項目搭建工作。在此背景下,Spring推出了Spring Boot項目,該項目可以讓使用者更快速的搭建項目,使用者可以更專注、快速的投入到業務系統開發中。系統配置、基礎代碼、項目依賴的jar包,甚至是開發時所用到的應用伺服器等,Spring Boot已經幫我們準備好,隻要在建立項目時,使用建構工具加入相應的Spring Boot依賴包,項目即可運作,使用者無需關心版本相容等問題。
Spring Boot支援Maven和Gradle這兩款建構工具。Gradle使用Groovy語言進行建構腳本的編寫,與Maven、Ant等建構工具有良好的相容性。鑒于筆者使用Maven較多,是以本書使用Maven作為項目建構工具。筆者成書時,Spring Boot最新的正式版本為1.5.4,要求Maven版本為3.2或以上。
在建立菜單中選擇建立“Maven Project”,填寫的項目資訊如圖2-5所示。
圖2-5 建立Maven項目
為了測試項目的可用性,加入Spring Boot的web啟動子產品,讓該項目具有Web容器的功能,pom.xml檔案内容如代碼清單2-1所示。
代碼清單2-1:codes02env-testpom.xml
配置完依賴後,該依賴會自動幫我們的項目加上其他的Spring子產品以及所依賴的第三方包,例如spring-core、sprin-beans、spring-mvc等,除了這些子產品外,還加入了嵌入式的Tomcat。
加入了依賴後,隻需要編寫一個簡單的啟動類,即可啟動Web服務,啟動類如代碼清單2-2所示。
代碼清單2-2:codes02env-testsrcmainjavaorgcrazyitcloudMyApplication.java
MyApplication類使用了@SpringBootApplication注解,該注解聲明了該類是一個Spring Boot應用,該注解具有“@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan”等注解的功能。直接運作MyApplication的main方法,看到以下輸出資訊後,證明成功啟動:
在前面小節加入的spring-boot-starter-web子產品,預設內建了SpringMVC,是以隻需要編寫一個Controller,即可實作一個最簡單的HelloWord程式,代碼清單2-3為控制器。
代碼清單2-3:codes02env-testsrcmainjavaorgcrazyitcloudMyController.java
Spring MVC支援直接釋出REST風格的WebService,建立測試的對象Person,如代碼清單2-4所示。
代碼清單2-4:codes02env-testsrcmainjavaorgcrazyitcloudPerson.java
修改控制器類,修改後如代碼清單2-5。
代碼清單2-5:codes02env-testsrcmainjavaorgcrazyitcloudMyController.java
調用REST服務的方式有很多,此部分内容将在後面章節中講述。
Spring Cloud基于Spring Boot建構,很多子產品的配置均放在Spring Boot的配置檔案中,是以有必要了解一下Spring Boot的配置檔案規則,為學習後面的章節打下基礎。
Spring Boot會按順序讀取各種配置,例如指令行參數、系統參數等,本章隻講述配置檔案的參數讀取。預設情況下,Spring Boot會按順序到以下目錄讀取application.properties或者application.yml檔案:
項目根目錄的config目錄。
項目根目錄。
項目classpath下的config目錄。
項目classpath根目錄。
如對以上描述有疑問,可參看圖2-6。
圖2-6 配置檔案讀取順序
圖2-6中的數字為檔案的讀取順序,本小節使用的boot-config-file項目依賴了spring-boot-starter-web項目,為pom.xml加入以下依賴:
如果想自己指定配置檔案,可以在Spring容器的啟動指令中加入參數,例子如代碼清單2-6所示。
代碼清單2-6:codes02boot-config-filesrcmainjavaorgcrazyitbootTestDefaultFile.java
TestDefaultFile類,在使用SpringApplicationBuilder時,配置了spring.config.location屬性來設定需要讀取的配置檔案。
YAML語言使用一種友善的格式的來進行資料配置,通過配置分層、縮進,在很大程度上增強了配置檔案的可讀性,使用YAML語言的配置檔案以“.yml”作為字尾。代碼清單2-7為一份yml配置檔案。
代碼清單2-7:codes02boot-config-filesrcmainresourcesmy-config.yml
在此,需要注意的是,每一行配置的縮進要使用空格,不要使用tab鍵進行縮進。代碼清單2-7對應的properties檔案内容如下:
如果在不同的環境下激活不同的配置,可以使用profiles,代碼清單2-8中配置了兩個profiles。
代碼清單2-8:codes02boot-config-filesrcmainresourcestest-profiles.yml
定義了mysql與oracle兩個profiles,profiels間使用“---”進行分隔,在Spring容器啟動時,使用spring.profiles.active來指定激活哪個profiles,如代碼清單2-9所示。
代碼清單2-9:codes02boot-config-filesrcmainjavaorgcrazyitbootTestProfiles.java
對Spring Boot的配置檔案有一定了解後,對後面章節Spring Cloud的配置内容就不會陌生。
每次修改Java後,都需要重新運作Main方法才能生效,這樣的會降低開發效果,我們可以使用Spring Boot提供的開發工具來實作熱部署,為項目加上以下依賴:
當Java檔案修改後,容器會重新加載本項目的Java類。
本文主要講述了本書基礎環境的搭建,讀者主要掌握Maven的使用,本書的案例幾乎都是Maven項目。Spring Cloud項目以Spring Boot作為基礎進行建構,本書的大部分案例也是基于Spring Boot,本章對Spring Boot作了大緻的講解,并且配合一個Hello World例子來示範Spring Boot的便捷,學習完本章後,讀者知道Spring Boot的大緻功能,即可達到目标。
我的官網