天天看點

springBoot-基礎原理配置檔案ymal基礎文法@Value擷取值和@ConfigurationProperties擷取值比較Validation校驗多環境切換配置檔案加載位置優先級springBoot對靜态資源的映射規則RestTemplate

文章目錄

  • 原理
  • 配置檔案
  • ymal基礎文法
  • @Value擷取值和@ConfigurationProperties擷取值比較
  • Validation校驗
  • 多環境切換
  • 配置檔案加載位置優先級
  • springBoot對靜态資源的映射規則
  • RestTemplate

原理

狂神的原理分析很好

配置檔案

SpringBoot使用一個全局的配置檔案 , 配置檔案名稱是固定的,兩種格式;

  1. application.properties

    文法結構 :key=value

  2. application.yml

    文法結構 :key:空格 value

配置檔案的作用

修改SpringBoot自動配置的預設值,因為SpringBoot在底層都給我們自動配置好了;

ymal基礎文法

@Value擷取值和@ConfigurationProperties擷取值比較

對比小結

@Value這個使用起來并不友好!我們需要為每個屬性單獨注解指派,比較麻煩;我們來看個功能對比圖

springBoot-基礎原理配置檔案ymal基礎文法@Value擷取值和@ConfigurationProperties擷取值比較Validation校驗多環境切換配置檔案加載位置優先級springBoot對靜态資源的映射規則RestTemplate

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 對象是否符合正規表達式的規則

.......等等
除此以外,我們還可以自定義一些資料校驗規則
           

多環境切換

springBoot-基礎原理配置檔案ymal基礎文法@Value擷取值和@ConfigurationProperties擷取值比較Validation校驗多環境切換配置檔案加載位置優先級springBoot對靜态資源的映射規則RestTemplate

全局配置檔案: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-基礎原理配置檔案ymal基礎文法@Value擷取值和@ConfigurationProperties擷取值比較Validation校驗多環境切換配置檔案加載位置優先級springBoot對靜态資源的映射規則RestTemplate

優先級由高到底,高優先級的配置會覆寫低優先級的配置;

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:同上,請求方式不同

繼續閱讀