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

Java中ConcurrentHashMap和Hashtable的區(qū)別

MyBatis insert操作插入數(shù)據(jù)之后返回插入記錄的id