基于application和bootstrap的加載順序及區(qū)別說明
application和bootstrap的加載順序及區(qū)別
bootstrap.yml(bootstrap.properties)先加載
application.yml(application.properties)后加載
bootstrap.yml 用于應用程序上下文的引導階段。
bootstrap.yml 由父Spring ApplicationContext加載。
父ApplicationContext 被加載到使用 application.yml 的之前。
bootstrap.yml
是系統(tǒng)級別的一些參數配置,這些參數一般是不變的。
application.yml 一般用來定義單個應用級別的,如果搭配 spring-cloud-config 使用 application.yml 里面定義的文件可以實現(xiàn)動態(tài)替換。
使用Spring Cloud Config Server時,應在 bootstrap.yml 中指定:
spring.application.name spring.cloud.config.server.git.uri
注意:
一旦bootStrap.yml 被加載,則內容不會被覆蓋,即便后期加載的application.yml的內容標簽與bootstrap的標簽一致,application 也不會覆蓋bootstrap, 而application.yml 里面的內容可以動態(tài)替換。
bootstrap.yml與application.yml執(zhí)行順序(原因:類加載器的先后順序)
結論:bootstrap.yml 先于 application.yml 加載
bootstrap.yml(bootstrap.properties)用來程序引導時執(zhí)行,應用于更加早期配置信息讀取,如可以使用來配置application.yml中使用到參數等
application.yml(application.properties) 應用程序特有配置信息,可以用來配置后續(xù)各個模塊中需使用的公共參數等。
bootstrap.yml 先于 application.yml 加載
應用:當使用 Spring Cloud Config Server 的時候
bootstrap.yml 中
spring.application.name: test spring.cloud.config.name: testName spring.cloud.config.uri: http://config1.spring-demo.test.com:8888
原因:類加載器的先后順序
負責加載class文件,class文件在文件開頭有特定的文件標示,并且ClassLoader只負責class文件的加載,至于它是否可以運行,則由Execution Engine決定
虛擬機自帶的加載器
1.啟動類加載器(Bootstrap)C++
2.擴展類加載器(Extension)Java
3.應用程序類加載器(AppClassLoader)Java 也叫系統(tǒng)類加載器,加載當前應用的classpath的所有類
4.用戶自定義加載器 Java.lang.ClassLoader的子類,用戶可以定制類的加載方式
注意java中反射的三種方法
1.通過Object類的getClass方法來獲取
java.lang.Object中定義有getClass方法:public final Class getClass()所有Java對象都具備這個方法,該方法用于返回調用該方法的對象的所屬類關聯(lián)的Class對
2.用.class的方式
使用類名加“.class”的方式即會返回與該類對應的Class對象。
3.使用Class.forName方法
Class有一個著名的static方法
forName:public static Class forName(String className) throws ClassNotFoundException
該方法可以根據字符串參數所指定的類名獲取與該類關聯(lián)的Class對象。
如果該類還沒有被裝入,該方法會將該類裝入JVM。
該方法聲明拋出ClassNotFoundException異常。
顧名思義,當該方法無法獲取需要裝入的類時(例如,在當前類路徑中不存在這個類),就會拋出這個異常。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java?通過手寫分布式雪花SnowFlake生成ID方法詳解
SnowFlake是twitter公司內部分布式項目采用的ID生成算法,開源后廣受國內大廠的好評。由這種算法生成的ID,我們就叫做SnowFlakeID,下面我們來詳細看看2022-04-04MyBatis-Plus標簽@TableField之fill自動填充方式
這篇文章主要介紹了MyBatis-Plus標簽@TableField之fill自動填充方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06java使用監(jiān)聽器實現(xiàn)一個統(tǒng)計網站在線人數的示例
本文主要介紹了java使用監(jiān)聽器實現(xiàn)一個統(tǒng)計網站在線人數的示例,具有一定的參考價值,有需要的朋友可以了解一下。2016-10-10Java中ConcurrentHashMap和Hashtable的區(qū)別
ConcurrentHashMap?和?Hashtable?都是用于在Java中實現(xiàn)線程安全的哈希表數據結構的類,但它們有很多區(qū)別,本文就來詳細的介紹一下,感興趣的可以了解一下2023-10-10MyBatis insert操作插入數據之后返回插入記錄的id
今天小編就為大家分享一篇關于MyBatis插入數據之后返回插入記錄的id,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03