全網首例全棧實踐(四)Spring Boot建立專案與配置詳解
一、專案建立
我們使用IDEA工具開發後臺專案,具體的安裝過程自行搜尋,比較簡單。安裝完成後開啟IDEA,選單欄選擇File->New-Project,選擇Spring Initializr,預設選擇Default,然後Next。

填寫好專案基本資訊,選擇Java Version為8以上,然後Next。

選擇Web,右邊勾選Web依賴。

選擇SQL,右邊勾選MySQL、JDBC、MyBatis依賴,然後Next。

填寫專案名稱和路徑,點選完成即可建立專案。

二、專案目錄
專案目錄結構如下:

DemoApplication為工程啟動的入口類,application.properties為配置檔案,pom.xml為maven專案依賴。
我們看一下pom.xml依賴,裡面包含我們建立專案過程中選擇的依賴。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
mysql的依賴我們看到有這麼一段<scope>runtime</scope>。
關於scope的分類,參照網上的講解:
1、complie
編譯域,這個是Maven中scope的預設值,預設就是使用這個值。compile表示被依賴專案需要同當前專案編譯時一起進行編譯,專案測試期以及本專案執行時期同樣生效,打包的時候需要包含進去。
2、test
測試域,指的是被依賴的專案僅在專案進行測試的時候生效,一般將日誌等依賴包(如:logback、Junit、Slf4j等)配置為test,專案執行時不生效。
3、runtime
執行域,指的是被依賴專案不會參與專案的編譯,但專案的測試期和執行時期會參與。
4、provide
provided指的是打包的時候可以不必打包進去,別的容器會提供。配置provide的被依賴專案會參與編譯,測試,執行等週期,但是在打包階段未參與。
5、system
系統域,效果等同於provided相同,差別是依賴項不會從maven遠端中央倉庫下載,而是從本地Maven倉庫中獲取。
三、配置檔案概述
Spring Boot提供了兩種常用的配置檔案,分別是properties檔案和yml檔案。
1.properties
Properties屬於傳統配置檔案,語法結構以key=value的形式存在,缺點是中文會亂碼,需要將其轉換為注ASCII。
2.yml
yml是YAML(YAML Ain't Markup Language)語言的檔案,以空格的縮排程度來控制層級關係,大小寫敏感。空格的個數無關緊要,只要左邊空格對齊即可視為同一個層級,但是需要注意的是不能用tab代替空格。
鑑於yml這種方式看起來比較一目瞭然,且yml檔案中文不會亂碼,我們的專案主要使用yml檔案進行配置,特殊情況使用properties檔案配置。
四、yml配置檔案詳解
在商業專案開發過程中,對程式碼質量的把控都比較嚴格,所以通常會有三種配置環境,即開發環境、測試環境、生產環境,根據不同的環境型別配置相應的屬性。
首先,刪除工程建立後預設的application.properties檔案,建立application.yml檔案。我們以開發環境配置為例,在resources目錄下建立application-dev.yml檔案。具體如下:

application.yml配置如下:
預設使用開發配置spring:profiles:active: devmain:allow-bean-definition-overriding: true
其中active為dev預設就是加在開發環境的配置檔案,也就是springboot啟動會載入application-dev.yml內的配置項。 allow-bean-definition-overriding: true
表示有相同bean的直接覆蓋。
再來看下application-dev.yml檔案:
#開發配置spring:profiles: dev
profiles為dev就是為了標識當前配置檔案是開發環境,和application.yml檔案中的active相對應。
五、配置檔案取值
當我們需要給配置檔案自定義內容,在其他類中獲取相應值的時候,我們通常有兩種方式取值,即 ConfigurationProperties 和 Value 。
Spring Boot通過ConfigurationProperties註解從配置檔案中獲取屬性,Spring的Value註解也可以獲取屬性。區別在於:
ConfigurationProperties
1.ConfigurationProperties可以從配置檔案中批量注入屬性。
2.支援獲取複雜的資料型別。
3. 對屬性名匹配的要求較低。
4. 支援JAVA的JSR303資料校驗。
5.不支援強大的SpEL表示式。
Value
1.只能一個個配置注入值。
2.不支援陣列、集合等複雜的資料型別。
3. 不支援資料校驗。
4. 對屬性名匹配有嚴格的要求。
5.支援SpEL表示式。
由於使用的是Spring Boot,我們還是重點講解ConfigurationProperties
註解取值。
- 首先匯入依賴
<dependency><groupId>org.springframework.boot </groupId><artifactId>spring-boot-configuration-processor </artifactId><optional>true </optional></dependency>
- 在application-dev.yml配置檔案中增加測試資料
#測試資料配置home:province: 遼寧city: 大連desc: 我居住在${home.province} ${home.city}
-
新增匹配類
新建包名為property,新建類檔案HomeProperties,如圖:
HomeProperties類如下:
@Component@ConfigurationProperties(prefix = "home")public class HomeProperties {/*** 省份*/private String province;/*** 城市*/private String city;/*** 描述*/private String desc;public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}@Overridepublic String toString() {return "HomeProperties{" +"province='" + province + '\'' +", city='" + city + '\'' +", desc='" + desc + '\'' +'}';}}
@Component註解表明是元件,@ConfigurationProperties註解表示從配置檔案取值,prefix表示讀取的配置資訊的字首,和自定義配置檔案中的值相對應。
使用方法:
在需要使用HomeProperties的類中注入,然後直接get相應屬性即可。
public class Test { @AutowiredHomeProperties homeProperties; ... ... homeProperties.getProvince(); }
6、問題記錄
@ConfigurationProperties註解出現“Spring Boot configuration annotation processor not found in classpath”
解決方法:
在pom檔案中增加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>