Bootstrap.yml的作用
bootstrap.yml的作用
加載順序
若application.yml 和bootstrap.yml 在同一目錄下:bootstrap.yml 先加載 application.yml后加載
bootstrap.yml 用于應用程序上下文的引導階段。bootstrap.yml 由父Spring ApplicationContext加載。
配置區別
bootstrap是spring cloud的配置上下文加載。由spring-cloud-content包加載。
引入依賴
application是spring boot的配置加載。
引入依賴
具體加載類
部分代碼
@Override public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) { ConfigurableEnvironment environment = event.getEnvironment(); //# spring.cloud.bootstrap.enabled 引導開關 if (!environment.getProperty("spring.cloud.bootstrap.enabled", Boolean.class, true)) { return; } // don't listen to events in a bootstrap context if (environment.getPropertySources().contains(BOOTSTRAP_PROPERTY_SOURCE_NAME)) { return; } ConfigurableApplicationContext context = null; // 引導文件名稱 默認bootstrap String configName = environment .resolvePlaceholders("${spring.cloud.bootstrap.name:bootstrap}"); // 加載配置 for (ApplicationContextInitializer> initializer : event.getSpringApplication() .getInitializers()) { // 從ParentContent加載 if (initializer instanceof ParentContextApplicationContextInitializer) { context = findBootstrapContext( (ParentContextApplicationContextInitializer) initializer, configName); } } if (context == null) { context = bootstrapServiceContext(environment, event.getSpringApplication(), configName); event.getSpringApplication() .addListeners(new CloseContextOnFailureApplicationListener(context)); } apply(context, event.getSpringApplication(), environment); }
bootstrap.yml 和 application.yml 都可以用來配置參數。
bootstrap.yml 用來程序引導時執行,應用于更加早期配置信息讀取。可以理解成系統級別的一些參數配置,這些參數一般是不會變動的。一旦bootStrap.yml 被加載,則內容不會被覆蓋。
application.yml 可以用來定義應用級別的, 應用程序特有配置信息,可以用來配置后續各個模塊中需使用的公共參數等。
屬性覆蓋問題
啟動上下文時,Spring Cloud 會創建一個 Bootstrap Context,作為 Spring 應用的 Application Context 的父上下文。
初始化的時候,Bootstrap Context 負責從外部源加載配置屬性并解析配置。這兩個上下文共享一個從外部獲取的 Environment。Bootstrap 屬性有高優先級,默認情況下,它們不會被本地配置覆蓋。
也就是說如果加載的 application.yml 的內容標簽與 bootstrap 的標簽一致,application 也不會覆蓋 bootstrap,而 application.yml 里面的內容可以動態替換。
bootstrap.yml典型的應用場景
微服務的 注冊中心、配置中心、項目名稱spring.application.name
以nacos為例
spring: application: name: paw-alibaba-nacos # profile profiles: active: dev # nacos cloud: nacos: discovery: server-addr: http://localhost:8848 username: nacos password: 123456 config: server-addr: http://localhost:8848 username: nacos password: 123456 context-path: nacos file-extension: yaml prefix: ${spring.application.name}
Bootstrap Spring
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。