SpringBoot熱加載實(shí)現(xiàn)與類(lèi)加載淺談

熱部署與熱加載:

熱部署和熱加載都是基于類(lèi)加載器實(shí)現(xiàn)的踱承,熱加載是服務(wù)器監(jiān)聽(tīng)class等文件的改變?nèi)缓髮?duì)改變的文件進(jìn)行局部加載,所以不會(huì)刪除session,也不會(huì)釋放內(nèi)存进每。熱部署就是全局部署,會(huì)清空session以及釋放內(nèi)存射亏。

類(lèi)加載機(jī)制:

java類(lèi)加載器主要有:

根類(lèi)加載器(Bootstrap ClassLoader) 一般加載%JAVA_HOME%/jre/lib下的一些jar包的class文件

擴(kuò)展類(lèi)加載器(Extension ClassLoader) 一般加載%JAVA_HOME%/jre/lib/ext中jar包的class文件

系統(tǒng)類(lèi)加載器(System?ClassLoader) 一般加載來(lái)自java命令的-classpath指定的jar包和類(lèi)路徑

自定義加載器(User ClassLoader) 用戶自定義的加載器近忙,默認(rèn)的父加載器是系統(tǒng)類(lèi)加載器

這些加載器有一個(gè)雙親委派的機(jī)制,就是說(shuō)智润,當(dāng)一個(gè)加載器接收到請(qǐng)求及舍,他會(huì)委托他的父類(lèi)加載器去加載。如果父類(lèi)找不到窟绷,他才會(huì)去加載锯玛。舉個(gè)栗子,java.lang.String 類(lèi),如果是系統(tǒng)類(lèi)加載器接到請(qǐng)求攘残,他會(huì)委托給擴(kuò)展類(lèi)加載器拙友,擴(kuò)展類(lèi)加載器會(huì)委托給根類(lèi)加載器,因?yàn)閖ava.lang.String.class是在%JAVA_HOME%/jre/lib/rt.jar下歼郭,所以最終由根類(lèi)加載器加載到JVM內(nèi)存


類(lèi)加載的階段:

加載:將類(lèi)的class文件讀入內(nèi)存遗契,并創(chuàng)建一個(gè)java.lang.Class對(duì)象放入方法區(qū)

驗(yàn)證:檢測(cè)被加載的類(lèi)是否有正確的內(nèi)部結(jié)構(gòu),會(huì)不會(huì)威脅虛擬機(jī)的安全等

準(zhǔn)備:為static修飾的變量分配內(nèi)存病曾,并設(shè)置初始值牍蜂,int型的是0,如果是static final修飾的泰涂,則進(jìn)入常量池

解析:將類(lèi)的二進(jìn)制數(shù)據(jù)中的符號(hào)引用替換為直接引用鲫竞。

初始化:當(dāng)初始化一個(gè)類(lèi)的時(shí)候,如果發(fā)現(xiàn)其父類(lèi)還沒(méi)有進(jìn)行過(guò)初始化逼蒙、則需要先觸發(fā)其父類(lèi)的初始化从绘,將準(zhǔn)備階段的初始值完成賦值。初始化運(yùn)行主類(lèi)其做,比如main方法顶考。

tomcat熱部署實(shí)現(xiàn)方式:

1.直接把項(xiàng)目的web文件夾放在webapps里

2.在tomcat/conf/server.xml的<host>里添加<context>

<Context?docBase="xxx"?path="/xxx"?reloadable="true"/>

其中docBase是你項(xiàng)目的web文件夾所在的目錄,path是用來(lái)在瀏覽器訪問(wèn)項(xiàng)目的虛擬路徑妖泄。

3.在tomcat/conf/Catalina/localhost/下添加一個(gè)xml驹沿,內(nèi)容如下

<?xml version="1.0" encoding="UTF-8"?>

<Context?docBase="xxx" reloadable="true"/>

其中docBase和reloadable跟第二步一樣,而項(xiàng)目訪問(wèn)的虛擬路徑是這個(gè)xml文件的文件名蹈胡。

SpringBoot實(shí)現(xiàn)熱加載

1.springloaded方式: 通過(guò)在maven的plug里加springloaded依賴(lài)


注意這種方式只能通過(guò)maven的方式去啟動(dòng)渊季。在idea編輯器里可以配置maven啟動(dòng)


注意maven啟動(dòng)命令是mvn spring-boot:run 但是idea已經(jīng)默認(rèn)前面加了mvn,所以這里配置不需要再寫(xiě)mvn了罚渐。

2.通過(guò)spring-boot-devtools方式: 在maven添加依賴(lài)

注意用idea編輯器的却汉,idea實(shí)現(xiàn)熱加載還需要修改兩個(gè)地方配置


這個(gè)要勾選上

然后按shift+alt+ctrl+/?


這個(gè)勾選上。到此就ok了荷并。

自定義加載器實(shí)現(xiàn)熱加載

用戶自定義加載器需要繼承ClassLoader合砂,實(shí)現(xiàn)原理就是通過(guò)一個(gè)線程去監(jiān)聽(tīng)文件的修改時(shí)間,然后重寫(xiě)findClass方法源织,把文件以流的形式讀進(jìn)來(lái)翩伪,然后調(diào)defineClass方法。在JDK1.2之后谈息,雙親委派模式已經(jīng)被引入到類(lèi)加載體系中缘屹,因此不建議重寫(xiě)loadClass方法,只需要重寫(xiě)findClass就可以了


這里是重寫(xiě)findClass核心代碼侠仇。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轻姿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌互亮,老刑警劉巖犁享,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胳挎,居然都是意外死亡饼疙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)慕爬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窑眯,“玉大人,你說(shuō)我怎么就攤上這事医窿“跛Γ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵姥卢,是天一觀的道長(zhǎng)卷要。 經(jīng)常有香客問(wèn)我,道長(zhǎng)独榴,這世上最難降的妖魔是什么僧叉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮棺榔,結(jié)果婚禮上瓶堕,老公的妹妹穿的比我還像新娘。我一直安慰自己症歇,他們只是感情好郎笆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著忘晤,像睡著了一般宛蚓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上设塔,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天凄吏,我揣著相機(jī)與錄音,去河邊找鬼闰蛔。 笑死竞思,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钞护。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼爆办,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼难咕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤余佃,失蹤者是張志新(化名)和其女友劉穎暮刃,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體爆土,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椭懊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了步势。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氧猬。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖坏瘩,靈堂內(nèi)的尸體忽然破棺而出盅抚,到底是詐尸還是另有隱情,我是刑警寧澤倔矾,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布妄均,位于F島的核電站,受9級(jí)特大地震影響哪自,放射性物質(zhì)發(fā)生泄漏丰包。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一壤巷、第九天 我趴在偏房一處隱蔽的房頂上張望邑彪。 院中可真熱鬧,春花似錦隙笆、人聲如沸锌蓄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瘸爽。三九已至,卻和暖如春铅忿,著一層夾襖步出監(jiān)牢的瞬間剪决,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工檀训, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柑潦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓峻凫,卻偏偏與公主長(zhǎng)得像渗鬼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荧琼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容