Spring Cloud 提供了更多功能作為兩個庫:Spring Cloud Context 和 Spring Cloud Commons辱挥。
- Spring Cloud Context 為
ApplicationContext
Spring Cloud 應用程序(引導上下文缨睡、加密汇荐、刷新范圍和環(huán)境端點)提供實用程序和特殊服務。 - Spring Cloud Commons 是在不同的 Spring Cloud 實現(例如 Spring Cloud Netflix 和 Spring Cloud Consul)中使用的一組抽象和通用類卵皂。
image-20211129105635286
image-20211126170333324
image-20211126170422664
image-20211126170557304
image-20211126170631270
image-20211126170722947
image-20211126171914042
那么他為啥要再啟動一個容器,啟動的這個容器都做了什么砚亭?
image-20211129094857581
image-20211129101516236
- PropertySourceBootstrapConfiguration
- 這就是那個解析 cloud config 的初始化器
- EncryptionBootstrapConfiguration
- Spring 內置了加解密灯变,支持對稱加密和非對稱加密。使用對稱加密只需要在bootstrap.yml文件中通過
encrypt.key
屬性指定加密用的密鑰捅膘,這樣SpringCloud就會自動創(chuàng)建一個org.springframework.security.crypto.encrypt.TextEncryptor
類型的bean添祸。 - 其中可以解析配置文件中加密配置的 bean EnvironmentDecryptApplicationInitializer 也是這個配置類注入的。
- Spring 內置了加解密灯变,支持對稱加密和非對稱加密。使用對稱加密只需要在bootstrap.yml文件中通過
- ConfigurationPropertiesRebinderAutoConfiguration
- 與屬性動態(tài)刷新(@RefreshScope)相關
- 監(jiān)聽 EnvironmentChangeEvent寻仗,然后綁定那些我們已經用 ConfigrationProperties 綁定過的 beans膝捞。
- 其他兩個(wo ye)不重(zhi)要(dao)...
總結一下:創(chuàng)建這個父容器是為了從 spring.factories 文件中解析出 @BootstrapConfiguration 對應的自動配置類,準備一些后續(xù)需要使用到的bean。
然后又啟動了一圈又回來了蔬咬。
image-20211129105101417
image-20211126173825653
image-20211126173855250
這些initializer啥時候被調用的呢鲤遥?
image-20211129092758033
image-20211129092900576
所以,總結一下 BootstrapApplicationListener 主要做了 2 件事:
- 啟動了自己的父容器林艘,從 spring.factories 文件中解析出 @BootstrapConfiguration 對應的自動配置類盖奈,準備一些后續(xù)需要使用到的bean。
- 為 SpringApplication 添加了一些初始化器狐援,在”子“容器啟動前做一些事情
接下來看一下其中一個比較重要的初始化器 PropertySourceBootstrapConfiguration钢坦,他主要是用來解析 cloud config 的。
image-20211130151906815
image-20211130150634938
上面那個是加載遠程文件的啥酱,本地的 bootstrap* 文件是在“父”容器啟動時觸發(fā) ApplicationEnvironmentPreparedEvent 然后到了監(jiān)聽器 ConfigFileApplicationListener 來加載的爹凹。
image-20211129124015493
因為BootstrapApplicationListener排在第一位,他又啟動了“父”容器镶殷,所以第一次啟動時并沒有執(zhí)行到 ConfigFileApplicationListener禾酱,第一次執(zhí)行 ConfigFileApplicationListener 是“父”容器,
image-20211129124259272
image-20211129124806850
image-20211129125220097
image-20211129125500829
- file: ./config/ & file:./ 為了 java -jar 啟動時讀取 jar 包外的配置
- classpath:/config/ & classpath:/ 讀取類路徑下的配置
image-20211130102709666
todo
- 可能與參數動態(tài)刷新有關绘趋,可以研究下日后颤陶,用于xadmin
image-20211126171635460
image-20211126172902301
- 突然覺得日志的配置要放到bootstrap.yml中一份了(application可以覆蓋嗎?)
image-20211129110327558
-
why陷遮?
wecom-temp-0242631582c5b2ad38748456f2a73085wecom-temp-2af26aa0f18b2846e98917a41e1a1908 配置文件覆蓋優(yōu)先級滓走?