文章目錄
- 原理
- 配置檔案
- ymal基礎文法
- @Value擷取值和@ConfigurationProperties擷取值比較
- Validation校驗
- 多環境切換
- 配置檔案加載位置優先級
- springBoot對靜态資源的映射規則
- RestTemplate
原理
狂神的原理分析很好
配置檔案
SpringBoot使用一個全局的配置檔案 , 配置檔案名稱是固定的,兩種格式;
-
application.properties
文法結構 :key=value
-
application.yml
文法結構 :key:空格 value
配置檔案的作用
修改SpringBoot自動配置的預設值,因為SpringBoot在底層都給我們自動配置好了;
ymal基礎文法
@Value擷取值和@ConfigurationProperties擷取值比較
對比小結
@Value這個使用起來并不友好!我們需要為每個屬性單獨注解指派,比較麻煩;我們來看個功能對比圖
1、@ConfigurationProperties隻需要寫一次即可 , @Value則需要每個字段都添加
2、松散綁定:這個什麼意思呢? 比如我的yml中寫的last-name,這個和lastName是一樣的, - 後面跟着的字母預設是大寫的。這就是松散綁定。可以測試一下
3、JSR303資料校驗 , 這個就是我們可以在字段是增加一層過濾器驗證 , 可以保證資料的合法性
4、複雜類型封裝,yml中可以封裝對象 , 使用value就不支援
結論:
配置yml和配置properties都可以擷取到值 , 強烈推薦 yml;
如果我們在某個業務中,隻需要擷取配置檔案中的某個值,可以使用一下 @value;
如果說,我們專門編寫了一個JavaBean來和配置檔案進行一一映射,就直接@configurationProperties,不要猶豫!
Validation校驗
@Validation
@NotNull(message="名字不能為空")
private String userName;
@Max(value=120,message="年齡最大不能查過120")
private int age;
@Email(message="郵箱格式錯誤")
private String email;
空檢查
@Null 驗證對象是否為null
@NotNull 驗證對象是否不為null, 無法查檢長度為0的字元串
@NotBlank 檢查限制字元串是不是Null還有被Trim的長度是否大于0,隻對字元串,且會去掉前後空格.
@NotEmpty 檢查限制元素是否為NULL或者是EMPTY.
Booelan檢查
@AssertTrue 驗證 Boolean 對象是否為 true
@AssertFalse 驗證 Boolean 對象是否為 false
長度檢查
@Size(min=, max=) 驗證對象(Array,Collection,Map,String)長度是否在給定的範圍之内
@Length(min=, max=) string is between min and max included.
日期檢查
@Past 驗證 Date 和 Calendar 對象是否在目前時間之前
@Future 驗證 Date 和 Calendar 對象是否在目前時間之後
@Pattern 驗證 String 對象是否符合正規表達式的規則
.......等等
除此以外,我們還可以自定義一些資料校驗規則
多環境切換
全局配置檔案:application.yml
開發環境配置檔案:application-dev.yml
測試環境配置檔案:application-test.yml
生産環境配置檔案:application-prod.yml
application.yml
server:
port: 8081
#選擇要激活那個環境塊
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev #配置環境的名稱
---
server:
port: 8084
spring:
profiles: prod #配置環境的名稱
application.yml是預設使用的配置檔案,在其中通過
spring.profiles.active
設定使用哪一個配置檔案
如果
application-prod.yml
和
application.yml
配置了相同的配置,比如都配置了運作端口,那application-prod.yml的優先級更高
注意:如果yml和properties同時都配置了端口,并且沒有激活其他環境 , 預設會使用properties配置檔案的!
配置檔案加載位置優先級
外部加載配置檔案的方式十分多,我們選擇最常用的即可,在開發的資源檔案中進行配置!
優先級由高到底,高優先級的配置會覆寫低優先級的配置;
springBoot對靜态資源的映射規則
webjars:以jar包的方式引入靜态資源;
靜态資源目錄
SpringBoot預設配置下,提供了以下幾個靜态資源目錄:
/static: classpath:/static/
/public: classpath:/public/
/resources: classpath:/resources/
/META-INF/resources:classpath:/META-INF/resources/
當然,可以通過spring.resources.static-locations配置指定靜态檔案的位置。但是要特别注意,一旦自己指定了靜态資源目錄,系統預設的靜态資源目錄就會失效。是以系統預設的就已經足夠使用了,盡量不要自定義。
#配置靜态資源
spring:
resources:
#指定靜态資源目錄
static-locations: classpath:/mystatic/
favicon.ico圖示(名字不能變)
如果在配置的靜态資源目錄中有favicon.ico檔案,SpringBoot會自動将其設定為應用圖示。
歡迎頁面
SpringBoot支援靜态和模闆歡迎頁,它首先在靜态資源目錄檢視index.html檔案做為首頁,若未找到則查找index模闆。
二、使用WebJars管理css&js
為什麼使用 WebJars?
顯而易見,因為簡單。但不僅是依賴這麼簡單:
清晰的管理 web 依賴
通過 Maven, Gradle 等項目管理工具就可以下載下傳 web 依賴
解決 web 元件中傳遞依賴的問題以及版本問題
頁面依賴的版本自動檢測功能
WebJars是将這些通用的Web前端資源打包成Java的Jar包,然後借助Maven工具對其管理,保證這些Web資源版本唯一性,更新也比較容易。關于webjars資源,有一個專門的網站 webjars網站,我們可以到這個網站上找到自己需要的資源,在自己的工程中添加入maven依賴,即可直接使用這些資源了。
RestTemplate
傳統情況下在java代碼裡通路restful服務,一般使用Apache的HttpClient。不過此種方法使用起來太過繁瑣。spring提供了一種簡單便捷的模闆類來進行操作,這就是RestTemplate。
demo:
使用RestTemplate通路該服務
//請求位址
String url = "http://localhost:8080/testPost";
//入參
RequestBean requestBean = new RequestBean();
requestBean.setTest1("1");
requestBean.setTest2("2");
requestBean.setTest3("3");
RestTemplate restTemplate = new RestTemplate();
ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);
(url, requestMap, ResponseBean.class)這三個參數分别代表 請求位址、請求參數、HTTP響應轉換被轉換成的對象類型。
RestTemplate方法的名稱遵循命名約定,第一部分指出正在調用什麼HTTP方法,第二部分訓示傳回的内容。本例中調用了restTemplate.postForObject方法,post指調用了HTTP的post方法,Object指将HTTP響應轉換為您選擇的對象類型。還有其他很多類似的方法,有興趣的同學可以參考官方api。
常用方法:
postForObject: 傳回資料為 響應體中資料轉換成的對象=json
getForObject:同上,請求方式不同
postForEntity:傳回資料為 ResponseEntity對象,包含對象頭等重要資訊。
getForEntity:同上,請求方式不同