二、SpringBoot配置檔案講解
java程式設計師使用Spring的時間都有幾年了,但是使用Spring和其他框架的結合的時候的配置檔案是比較複雜的。比如你如果要新增mybatis的時候,你可能會新增一個spring-mybatis.xml的配置。但當SpringBoot出現的時候,這些都不用了,它簡化了很多配置,讓搭建專案變得很簡單。這一節就講講springboot的配置檔案是怎麼弄的。 構建一個maven專案,還有java目錄和resource目錄。resource目錄就是用來存放配置檔案的。
配置檔案有兩種形式
-
.properties properties結尾的配置檔案跟我們傳統的配置檔案一樣
-
.yml 有點類似樹形結構
首先我們先來講講* .properties 我們用idea建立springboot專案的時候,會給我們建立好一個application.properties檔案,但是這個配置檔案是空的。 那application.properties在專案中一般存放什麼屬性嘞?使用springboot建立的專案,一般是分環境的,比如我們除了建立application.properties 還會建立下面3個檔案 application-dev.properties application-test.properties application-prod.properties 這三個檔案的作用是什麼嘞?下表說明
application.properties | 這個配置檔案是通用的,不管任何環境都會引用裡面的配置 | |
application-dev.properties | dev這個配置是開發環境的配置 | |
application-test.properties | test這個是測試環境的配置 | |
application-prod.properties | prod這個是正式環境的配置 |
看到這個表就可以知道,他們的作用是幹嘛的。 那麼問題又來了 1>那我怎麼知道我在開發環境用dev,在測試環境用test,在線上環境用prod? 2>那這些環境裡面到底有什麼區別嘞? 先解釋第一個問題: application.properties配置檔案是什麼環境都會用到的配置檔案,可以在裡面設定spring.profiles.active=dev的屬性,在啟動springboot專案的時候,就會讀取application-dev.properties的屬性了,假如你想讀取test環境的配置嘞,那就把dev改成test就ok了。

這樣的話,又有個問題了,那假如我把專案打成一個jar包,我需要同時部署到linux伺服器上,我怎麼設定為test嘞,這也是很簡單的。 springboot專案構建的jar包是可以用 java -jar XXX.jar 啟動的。而且他還支援在後面新增引數 java -jar XXX.jar --spring.profiles.active=test 這樣就解決問題了。可以把這些引數配置在sheell檔案中,這樣就更加方便了
在解釋第二個問題: 舉個列子在dev環境中我的伺服器ip是192.168.0.5,在test 我的伺服器ip是192.168.0.100 在prod我的伺服器ip可能是www.xxx.com 或者配置資料庫的訪問地址,肯定是每個環境都不一樣。這就是分環境的好處。
那我們怎麼在程式中訪問這些屬性呢? springboot提供兩種方式訪問 1>直接在屬性上面加上@Value("${server.ip}")

2>將配置賦於給一個javabean

在需要的地方引用javabean

通過上面的兩種方式我們就能很方便的新增和獲取系統的配置
網頁測試
- 新建控制層
上圖控制層用的註解不是@controller而是@Restcontroller,這兩個有什麼區別呢? @Restcontroller包含了@controller註解和@ResponseBody註解,以前我們如果要返回一個json資料,需要在控制層的方法上加上@ResponseBody,現在用@Restcontroller就可以搞定。
-
測試
*.properties 和 * .yml 哪個更好用吶? 推薦使用yml progperties配置檔案比較直觀,一行代表一個屬性,簡單明瞭,但屬性很多的時候就有點亂。 yml配置檔案,層級分明,比較像java類的表達方式,即使屬性很多,也可以放在某一父類屬性下面。