
1. @Value("${變量名稱}")
使用@Value("${變量名稱}")是最簡單的一種形式
代碼中直接通過該方式引用即可
public class MicroGatewayConfig {
@Value("${config}")
private String config;
}
這種方式簡單粗暴,但是不推薦使用,
缺點很多
- idea也給我們報黃色的警告。而且我們不能再配置文件中按住“ctrl”鼠標(biāo)點擊配置變量直接跳到程序中。如果我們的項目中使用大量這樣的變量,將會是災(zāi)難。
- 最致命的問題是程序中變量獲取到的值只能是字符串,不能支持?jǐn)?shù)字,布爾類型。
-
使用這種形式,變量的值只會在SpringBoot啟動的時候賦值一次,以后不會改變,如果我們使用了配置中心,隨后,我們即使更新了配置中心中配置信息的值,程序也不會同步,除非我們重啟項目,配置中心就顯得比較尷尬。
2.1 配置類
@Setter
@Getter
@Component
@ConfigurationProperties("spring.cloud.gateway.custom")
public class MicroGatewayConfig {
/**
* config demo
*/
private String config;
}
@ConfigurationProperties注解內(nèi)容填寫的是這個配置變量的前綴
這樣配置信息就以類的形成呈現(xiàn)出來,如果我們需要使用配置信息,直接通過@Resource注入即可。在配置文件中,也不會報警告,在編寫配置信息的時候,強(qiáng)大的idea也會幫我們聯(lián)想。

2.2 配置類嵌套
當(dāng)我們的配置信息越來越多時,需要針對不同的配置進(jìn)行分類,如果全部編寫在同一個配置類中,那么這個配置類會顯得十分臃腫。
springBoot支持配置類嵌套的形式。
舉個例子
我現(xiàn)在網(wǎng)關(guān)通過配置文件中的“開關(guān)”決定是否對請求信息進(jìn)行緩存。
這樣,我們可以將關(guān)于請求緩存相關(guān)的配置信息單獨一個類進(jìn)行保存。
- 緩存配置類
@Data
@Component
@ConfigurationProperties("spring.cloud.gateway.custom.cache-request")
public class CacheRequestConfig {
/**
* 是否緩存body信息
*/
private Boolean body = false;
/**
* 是否緩存表單信息
*/
private Boolean formData = false;
/**
* 是否緩存encodeBody信息
*/
private Boolean encodeFormData = false;
}
- 主配置類
@Setter
@Getter
@Component
@ConfigurationProperties("spring.cloud.gateway.custom")
public class MicroGatewayConfig {
private CacheRequestConfig cacheRequest;
}
-
配置文件
image.png
我們在編寫配置類的時候,可以發(fā)現(xiàn)一個有趣的事情,就是針對于布爾類型,我們除了使用true/false外,還可以使用on/off進(jìn)行代替,在程序中springBoot會自動替我們轉(zhuǎn)換成true/false。這樣增強(qiáng)了配置的可讀性。
2.3 List配置信息
我們在配置信息中有時候可能需要配置一個list,比如配置redis的集群ip信息。之前我們可以使用一個字符串代替,每個ip中間使用特定的符號隔開,然后在程序中自己手動的去分隔。
強(qiáng)大的yml支持List,表達(dá)形式是每個元素前面使用“-”+空格
eg:
配置一個redis集群列表
- 配置類
@Data
@Component
@ConfigurationProperties("spring.cloud.gateway.custom")
public class MicroGatewayConfig {
private CacheRequestConfig cacheRequest;
private List<String> redisClusterPortList;
}
- 配置信息
spring:
cloud:
gateway:
custom:
cache-request:
body: true
form-data: true
encode-form-data: on
redisClusterHostList:
- 192.168.1.1
- 196.168.1.0
2.3 Map配置信息
yml使用map的格式為:
map變量名
key: value
key: value
map適用于未知的鍵值對,聽起來可能有點奇怪,舉個例子,加入我們想編寫一個header校驗器,但是我們校驗的內(nèi)容需要具體的場景來定義,但是校驗的規(guī)則已經(jīng)制定好了,這里說一下我指定的校驗規(guī)則。key 即為header的key,value為header的value,如果value的值可以是多個值中的任意一個,那么用“|”隔開,如果header的值可以為任意,但是不能為空,那么value的值不寫即可。
eg:
這里有三個header的值,分別是version,固定值為:1.0.0,platform是ios或者android都可以,diviceNo為任意值。那么具體的配置如下:
header:
version: 1.0.0
platform: iso|android
diviceNo:
進(jìn)階用法:
1. 為配置添加候選值
需求:
假設(shè)我這里有性別這個配置,候選值分別為man和woman
候選值依賴于枚舉實現(xiàn),我們需要編寫一個枚舉類
public enum Sex {
man,
woman
}
配置類
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserConfiguration {
/**
* 用戶性別
*/
private Sex sex;
}

2.為配置添加默認(rèn)值
還是上面的例子,如果我們配置用戶性別,默認(rèn)是man,我們只需要在配置類寫默認(rèn)值即可
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserConfiguration {
/**
* 用戶性別,默認(rèn)man
*/
private Sex sex = Sex.man;
}
3. map的高階用法
用過feign的朋友都知道,feign可以針對每個服務(wù)進(jìn)行配置,而且配置的時候還有提示信息,如下:
feign:
client:
config:
default:
connectTimeout: 1000
readTimeout: 1000
user-servce:
connectTimeout: 5000
readTimeout: 5000
order-service:
connectTimeout: 3000
readTimeout: 3000
feign配置文件部分代碼如下:
@ConfigurationProperties("feign.client")
public class FeignClientProperties {
private boolean defaultToProperties = true;
private String defaultConfig = "default";
private Map<String, FeignClientConfiguration> config = new HashMap<>();
可以看出他存儲配置類的方式是采用map,我們的服務(wù)名即為map的key,配置信息即為map的value

