日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

对集合变量定义赋值_SpringBoot配置加载原理(自定义加载配置)

發(fā)布時間:2024/8/5 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对集合变量定义赋值_SpringBoot配置加载原理(自定义加载配置) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

在SpringBoot應(yīng)用程序中會有很多的地方定義配置文件,如:

bootstrap.properties

application.properties

或者是SpringCloud中定義的遠程配置中心,在這些地方我們只需要定義好我們的配置屬性,然后在代碼中使用如下的兩個注解就可以使用了:

@Value(${server.port})--只能給一個屬性賦值

@ConfigurationProperties(prefix = "spring.datasource.druid")--可以將此前綴的屬性自動賦值給一個bean的屬性。

下面講下配置加載的原理,知道原理后,我們就可以將任何遠程的配置或者是自定義的配置加載到應(yīng)用程式中,然后就可以只用@Value和@ConfigurationProperties注解使用。

原理

先看一下SpringBoot中關(guān)于屬性的幾個重要的類:

ConfigurableEnvironment--接口1.定義了可以添加和設(shè)置活躍的profile文件(默認只有一個,可以調(diào)用此方法設(shè)置幾個活躍的配置文件)。2.獲取環(huán)境變量。--操作系統(tǒng)的變量3.獲取系統(tǒng)變量。--java層面的啟動變量4.MutablePropertySources getPropertySources()這個方法重點關(guān)注,后面會用到,能獲取到所有配置信息。5.MutablePropertySources這個類里面有個list集合,用于存放所有的配置。6.只要將配置信息加入到MutablePropertySources的list集合中,我們就可以使用了(重點,重點,重點)。

ConfigurableEnvironment接口

來一張圖直觀一些,就是加載各種配置

MutablePropertySources1.有一個list屬性private final List> propertySourceList = new CopyOnWriteArrayList<>();2.PropertySource就是具體的配置,我們的任務(wù)就是把我們的配置信息構(gòu)造成PropertySource對象,然后加入到這個list當(dāng)中去。PropertySource1.有兩個重要屬性protected final String name;--配置定義的名稱protected final T source;--具體配置信息

例子

如果要實現(xiàn)動態(tài)的將配置信息添加到應(yīng)用程序中,我們需要定義一個EnvironmentPostProcessor的實現(xiàn)類。Talk is cheap,show me the code...

@Slf4j public class CustomEnvironmentPostProcessor implements EnvironmentPostProcessor { PropertiesPropertySourceLoader load=new PropertiesPropertySourceLoader(); //可以將.properties的配置文件加載進來 @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { MutablePropertySources propertySources =environment.getPropertySources(); //獲取到MutablePropertySources對象 Resource resource=new ClassPathResource("custom.properties"); //自定義的配置文件,具體位置如下圖 try { PropertySource propertySource=load.load("customProperties",resource).get(0); //生成PropertySource對象 propertySources.addFirst(propertySource); //將我們的PropertySource對象加入到集合中 } catch (IOException e) { e.printStackTrace(); } }}

記得要在META-INF下的spring.factories(沒有手動創(chuàng)建)文件添加EnvironmentPostProcessor實現(xiàn)類的定義

這樣服務(wù)啟動之后,在custom.properties定義的任何配置信息,都可以使用@Value和@ConfigurationProperties注解使用。Spring Cloud的各種配置中心也是這個原理實現(xiàn)的,PropertySource這個頂層抽象定義了配置資源,我們只需要創(chuàng)建配置資源具體對象,然后加入到MutablePropertySources的集合屬性中即可。

后續(xù)再說明下如何加載各個位置的配置資源...

后續(xù)補充:

上面的例子中使用到了PropertiesPropertySourceLoader來加載配置文件,其實還有如下的類可以加載

PropertySourceLoader--接口

PropertiesPropertySourceLoader--實現(xiàn)類(例子中使用到的),加載.properties

YamlPropertySourceLoader--實現(xiàn)類,加載.yaml配置

它們的load()方法需要2個參數(shù)

load(String name, Resource resource)

name--我們可以隨意改名字

Resource--資源的實現(xiàn)類,有如下的可以使用

總結(jié)

以上是生活随笔為你收集整理的对集合变量定义赋值_SpringBoot配置加载原理(自定义加载配置)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。