全網首例全棧實踐(四)Spring Boot建立專案與配置詳解

一、專案建立

我們使用IDEA工具開發後臺專案,具體的安裝過程自行搜尋,比較簡單。安裝完成後開啟IDEA,選單欄選擇File->New-Project,選擇Spring Initializr,預設選擇Default,然後Next。

全網首例全棧實踐(四)Spring Boot建立專案與配置詳解

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

全網首例全棧實踐(四)Spring Boot建立專案與配置詳解

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

全網首例全棧實踐(四)Spring Boot建立專案與配置詳解

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

全網首例全棧實踐(四)Spring Boot建立專案與配置詳解

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

全網首例全棧實踐(四)Spring Boot建立專案與配置詳解

二、專案目錄

專案目錄結構如下:

全網首例全棧實踐(四)Spring Boot建立專案與配置詳解

DemoApplication為工程啟動的入口類,application。properties為配置檔案,pom。xml為maven專案依賴。

我們看一下pom。xml依賴,裡面包含我們建立專案過程中選擇的依賴。

mysql mysql-connector-java runtime

mysql的依賴我們看到有這麼一段runtime

關於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檔案。具體如下:

全網首例全棧實踐(四)Spring Boot建立專案與配置詳解

application。yml配置如下:

預設使用開發配置spring: profiles: active: dev main: 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

註解取值。

首先匯入依賴

org。springframework。boot spring-boot-configuration-processor true

2。在application-dev。yml配置檔案中增加測試資料

#測試資料配置home: province: 遼寧 city: 大連 desc: 我居住在${home。province} ${home。city}

3。新增匹配類

新建包名為property,新建類檔案HomeProperties,如圖:

全網首例全棧實踐(四)Spring Boot建立專案與配置詳解

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; } @Override public 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檔案中增加

org。springframework。boot spring-boot-configuration-processor true