Springboot多種情況yml配置代碼實(shí)例
springboot 中各種配置項(xiàng)紀(jì)錄
1. @Value
最早獲取配置文件中的配置的時(shí)候,使用的就是這個(gè)注解,SpEL表達(dá)式語言。
// 使用起來很簡(jiǎn)單 @Value("${config.demo.value:defaultValue}") private String simpleValue;
通常我們配置的時(shí)候,不僅僅是一個(gè)單獨(dú)字段,可能是一組配置,用來組成一個(gè)對(duì)象。這個(gè)時(shí)候spring為我們提供了這個(gè)注解。
簡(jiǎn)單的對(duì)象,在yml里也可以很簡(jiǎn)單的寫出來。直接把每一個(gè)字段寫出即可。
而對(duì)復(fù)雜對(duì)象,如:list、map等的,就需要查一下資料了,這里簡(jiǎn)單記錄一下寫法,直接看代碼。
# 配置示例 config: demo: value: testValue simpleConfig: config: testConfig str1: abc,cde str2: - abc - cde configMap: key1: value1 海賊王: 路飛 simpleConfigs: - config: 羅賓 count: 1 - config: 烏索普 count: 1 - config: 索隆 count: 1 configObjMap: key1: config: value1 key2: config: value2
pojo 對(duì)象定義如下:
@Data @ConfigurationProperties(prefix = "config.demo") @Configuration public class ConfigDemo { @Value("${config.demo.value:defaultValue}") private String simpleValue; /**===========簡(jiǎn)單對(duì)象===========*/ /** * 對(duì)象 */ private SimpleConfig simpleConfig; /** * 字符串?dāng)?shù)組1 */ private List<String> str1; /** * 字符串?dāng)?shù)組1 */ private List<String> str2; /** * 鍵值對(duì) */ private Map<String, String> configMap; /** * ===========多個(gè)復(fù)雜對(duì)象========== */ /** * 對(duì)象集合 */ private List<SimpleConfig> simpleConfigs; /** * 對(duì)象作為map值 */ private Map<String, SimpleConfig> configObjMap; @Data public static class SimpleConfig { // 注意:這里需要內(nèi)部類是public的,要不然注入的時(shí)候會(huì)出錯(cuò)。 private String config; private int count; } }
以上就是各種情況的書寫。其實(shí)也不難,list 就增加 - 來作為單個(gè)對(duì)象標(biāo)識(shí),而map就直接寫key即可。
而spring在存儲(chǔ)properties的時(shí)候是怎么處理的呢,我們可以斷點(diǎn)一下 PropertyPlaceholderHelper,在這里我們可以看到存儲(chǔ)各種配置的source如下圖:
底層都是通過一個(gè)ResourceReloadingMap來存儲(chǔ)的,那么存儲(chǔ)list的時(shí)候,是什么結(jié)構(gòu)呢,如下:
// 存儲(chǔ)的時(shí)候是這樣的: simpleConfigs[0].config=configValue simpleConfigs[0].count=countValue ...
所以最終都是通過鍵值對(duì)的方式,只是對(duì)應(yīng)的格式,spring可以解析成對(duì)應(yīng)的樣子而已。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于SpringMVC對(duì)Restful風(fēng)格的支持詳解
Restful就是一個(gè)資源定位及資源操作的風(fēng)格,不是標(biāo)準(zhǔn)也不是協(xié)議,只是一種風(fēng)格,是對(duì)http協(xié)議的詮釋,下面這篇文章主要給大家介紹了關(guān)于SpringMVC對(duì)Restful風(fēng)格支持的相關(guān)資料,需要的朋友可以參考下2022-01-01SpringBoot利用filter實(shí)現(xiàn)xss防御功能
Cross-Site?Scripting(跨站腳本攻擊)簡(jiǎn)稱?XSS,是一種代碼注入攻擊,攻擊者通過在目標(biāo)網(wǎng)站上注入惡意腳本,使之在用戶的瀏覽器上運(yùn)行,利用這些惡意腳本,攻擊者可獲取用戶的敏感信息,本文給大家介紹了SpringBoot利用filter實(shí)現(xiàn)xss防御功能,需要的朋友可以參考下2024-09-09java阻塞隊(duì)列BlockingQueue詳細(xì)解讀
這篇文章主要介紹了java阻塞隊(duì)列BlockingQueue詳細(xì)解讀,在新增的Concurrent包中,BlockingQueue很好的解決了多線程中,如何高效安全“傳輸”數(shù)據(jù)的問題,通過這些高效并且線程安全的隊(duì)列類,為我們快速搭建高質(zhì)量的多線程程序帶來極大的便利,需要的朋友可以參考下2023-10-10SpringCloud網(wǎng)關(guān)組件Gateway原理深度解析
Spring Cloud Gateway是Spring Cloud微服務(wù)生態(tài)下的網(wǎng)關(guān)組件,一些基礎(chǔ)的請(qǐng)求預(yù)處理的邏輯可以統(tǒng)一實(shí)現(xiàn)在網(wǎng)關(guān)這一層,這樣業(yè)務(wù)服務(wù)只需要專注于處理業(yè)務(wù)邏輯即可,所以本文就帶大家深度解析網(wǎng)關(guān)組件Gateway,需要的朋友可以參考下2023-07-07idea插件篇之java內(nèi)存分析工具(JProfiler)的使用
這篇文章主要介紹了idea插件篇之java內(nèi)存分析工具(JProfiler),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java設(shè)計(jì)模式之備忘錄模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院
我們?cè)诰幊痰臅r(shí)候,經(jīng)常需要保存對(duì)象的中間狀態(tài),當(dāng)需要的時(shí)候,可以恢復(fù)到這個(gè)狀態(tài)。接下來通過本文給大家分享java設(shè)計(jì)模式之備忘錄模式,感興趣的的朋友一起看看吧2017-08-08springboot讀取自定義配置文件節(jié)點(diǎn)的方法
這篇文章主要介紹了springboot讀取自定義配置文件節(jié)點(diǎn)的方法,本文給大家介紹的非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-05-05