一種在web應(yīng)用中實(shí)現(xiàn)在線升級(jí)代碼的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及應(yīng)用升級(jí)更新,特別是一種在web應(yīng)用中實(shí)現(xiàn)在線升級(jí)代碼的方法。
【背景技術(shù)】
[0002] Web應(yīng)用通過發(fā)布接口來(lái)提供服務(wù),在應(yīng)用運(yùn)行過程中,當(dāng)發(fā)現(xiàn)服務(wù)存在bug,需要 修復(fù),或者提供了更多的服務(wù),就需要更新應(yīng)用的代碼,以便提供更好的服務(wù)質(zhì)量。但是傳 統(tǒng)的應(yīng)用更新存在以下問題:
[0003] -是應(yīng)用更新時(shí),需要停止服務(wù),放入更新代碼后再重新啟動(dòng),如果應(yīng)用本身是比 較大型的服務(wù),重啟時(shí)間比較長(zhǎng),那么會(huì)導(dǎo)致用戶在應(yīng)用重啟的這段時(shí)間里無(wú)法使用服務(wù)。
[0004] 二是如果通過負(fù)載均衡,部署兩套服務(wù),升級(jí)其中一套,另外一套繼續(xù)服務(wù),對(duì)于 小型的服務(wù)來(lái)說又是很耗費(fèi)資源的;
[0005] 為了使服務(wù)可以持續(xù)提供,不影響用戶的使用,同時(shí)使用較少的資源,需要一種通 實(shí)現(xiàn)在線升級(jí)代碼的方法。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明解決的技術(shù)問題在于提供一種在web應(yīng)用中實(shí)現(xiàn)在線升級(jí)代碼的方法,解 決了使用較少資源完成應(yīng)用的在線升級(jí)問題。
[0007] 本發(fā)明解決上述技術(shù)問題的技術(shù)方案是:
[0008] 包括如下步驟:
[0009] 所述的方法包括如下步驟:
[0010]步驟1:創(chuàng)建統(tǒng)一的提供服務(wù)接口;
[0011] 步驟2:創(chuàng)建web應(yīng)用啟動(dòng)模塊,加載所有jar包到內(nèi)存;
[0012] 步驟3:統(tǒng)一接口獲取內(nèi)存并實(shí)例化,處理后返回;
[00?3]步驟4:放入更新jar包,啟動(dòng)更新模塊;
[0014] 步驟5:判斷應(yīng)用是否已在更新狀態(tài),是,執(zhí)行步驟8;不在更新狀態(tài),執(zhí)行步驟6;
[0015] 步驟6:更新模塊獲取jar包內(nèi)容,放到內(nèi)存中,完成更新;
[0016] 步驟7:調(diào)用統(tǒng)一接口繼續(xù)提供服務(wù);
[0017] 步驟8:結(jié)束。
[00?8]所述的統(tǒng)一的服務(wù)接口帶有computeActionType參數(shù),標(biāo)識(shí)調(diào)用功能,并把所有入 參以map形式保存;
[0019] 所述的統(tǒng)一接口根據(jù)入?yún)omputeActionType,獲取全局map中對(duì)應(yīng)的實(shí)現(xiàn)類,初 始化實(shí)現(xiàn)類,并把請(qǐng)求入?yún)ap賦值到實(shí)現(xiàn)類中,執(zhí)行實(shí)現(xiàn)類,把執(zhí)行結(jié)果返回給用戶。 [0020]所述的啟動(dòng)模塊,在web應(yīng)用啟動(dòng)時(shí)執(zhí)行,遍歷應(yīng)用特定路徑下jar包,并加載jar 包中所有baseTask類的實(shí)現(xiàn)類,同時(shí)加入到全局靜態(tài)Map中。
[0021]所述的判斷應(yīng)用是否更新中,更新模塊帶有全局變量,記錄應(yīng)用是否更新中,用戶 調(diào)用更新接口后,更新模塊啟動(dòng),標(biāo)識(shí)應(yīng)用升級(jí)中,更新模塊執(zhí)行完畢后標(biāo)識(shí)應(yīng)用不在升級(jí) 狀態(tài),可以繼續(xù)下次更新。
[0022]掃描特定路徑下所有jar包,并獲取所有baseTask類的實(shí)現(xiàn)類,加入到臨時(shí)map中, 掃描完畢后,替換原有內(nèi)存中的全局靜態(tài)map。
[0023] 本發(fā)明通過把應(yīng)用服務(wù)的實(shí)現(xiàn)類加載到內(nèi)存中,使用時(shí)再實(shí)例化。應(yīng)用更新時(shí),掃 描所有jar包,重新加載實(shí)現(xiàn)類的內(nèi)存中進(jìn)行替換,實(shí)現(xiàn)應(yīng)用的在線升級(jí)。在生產(chǎn)環(huán)境中,只 需要提供足夠一套足夠應(yīng)用運(yùn)行的環(huán)境即可,應(yīng)用升級(jí)時(shí),還能繼續(xù)提供服務(wù),能減少運(yùn)營(yíng) 成本,同時(shí)也能提供穩(wěn)定的服務(wù)。
【附圖說明】
[0024] 下面結(jié)合附圖對(duì)本發(fā)明進(jìn)一步說明:
[0025]圖1為本發(fā)明方法流程圖。
【具體實(shí)施方式】
[0026] 如圖1所示,本發(fā)明主要包括以下步驟:
[0027]創(chuàng)建統(tǒng)一的服務(wù)入口,處理用戶的請(qǐng)求:
[0028] L0029J
[0030] 獲取服務(wù)實(shí)現(xiàn)類代碼如下
[0031]
[0036] 把實(shí)現(xiàn)類加載到內(nèi)存代碼
[0037]
【主權(quán)項(xiàng)】
1. 一種在web應(yīng)用中實(shí)現(xiàn)在線升級(jí)代碼的方法,其特征在于:所述的方法包括如下步 驟: 步驟1:創(chuàng)建統(tǒng)一的提供服務(wù)接口; 步驟2:創(chuàng)建web應(yīng)用啟動(dòng)模塊,加載所有jar包到內(nèi)存; 步驟3:統(tǒng)一接口獲取內(nèi)存并實(shí)例化,處理后返回; 步驟4:放入更新jar包,啟動(dòng)更新模塊; 步驟5:判斷應(yīng)用是否已在更新狀態(tài),是,執(zhí)行步驟8;不在更新狀態(tài),執(zhí)行步驟6; 步驟6:更新模塊獲取jar包內(nèi)容,放到內(nèi)存中,完成更新; 步驟7:調(diào)用統(tǒng)一接口繼續(xù)提供服務(wù); 步驟8:結(jié)束。2. 根據(jù)權(quán)利要求1所述的在web應(yīng)用中實(shí)現(xiàn)在線升級(jí)代碼的方法,其特征在于:所述的 統(tǒng)一的服務(wù)接口帶有computeActionType參數(shù),標(biāo)識(shí)調(diào)用功能,并把所有入?yún)⒁詍ap形式保 存; 所述的統(tǒng)一接口根據(jù)入?yún)ⅸ?11^11^64〇1:;[〇1^7口6,獲取全局11^口中對(duì)應(yīng)的實(shí)現(xiàn)類,初始化 實(shí)現(xiàn)類,并把請(qǐng)求入?yún)ap賦值到實(shí)現(xiàn)類中,執(zhí)行實(shí)現(xiàn)類,把執(zhí)行結(jié)果返回給用戶。3. 根據(jù)權(quán)利要求1所述的在web應(yīng)用中實(shí)現(xiàn)在線升級(jí)代碼的方法,其特征在于:所述的 啟動(dòng)模塊,在web應(yīng)用啟動(dòng)時(shí)執(zhí)行,遍歷應(yīng)用特定路徑下jar包,并加載jar包中所有 baseTask類的實(shí)現(xiàn)類,同時(shí)加入到全局靜態(tài)Map中。4. 根據(jù)權(quán)利要求2所述的在web應(yīng)用中實(shí)現(xiàn)在線升級(jí)代碼的方法,其特征在于:所述的 啟動(dòng)模塊,在web應(yīng)用啟動(dòng)時(shí)執(zhí)行,遍歷應(yīng)用特定路徑下jar包,并加載jar包中所有 baseTask類的實(shí)現(xiàn)類,同時(shí)加入到全局靜態(tài)Map中。5. 根據(jù)權(quán)利要求1至4任一項(xiàng)所述的在web應(yīng)用中實(shí)現(xiàn)在線升級(jí)代碼的方法,其特征在 于:所述的判斷應(yīng)用是否更新中,更新模塊帶有全局變量,記錄應(yīng)用是否更新中,用戶調(diào)用 更新接口后,更新模塊啟動(dòng),標(biāo)識(shí)應(yīng)用升級(jí)中,更新模塊執(zhí)行完畢后標(biāo)識(shí)應(yīng)用不在升級(jí)狀 態(tài),可以繼續(xù)下次更新。6. 根據(jù)權(quán)利要求1至4任一項(xiàng)所述的更新模塊,其特征是:掃描特定路徑下所有jar包, 并獲取所有baseTask類的實(shí)現(xiàn)類,加入到臨時(shí)map中,掃描完畢后,替換原有內(nèi)存中的全局 靜態(tài)map〇7. 根據(jù)權(quán)利要求5所述的更新模塊,其特征是:掃描特定路徑下所有jar包,并獲取所有 baseTask類的實(shí)現(xiàn)類,加入到臨時(shí)map中,掃描完畢后,替換原有內(nèi)存中的全局靜態(tài)map。
【專利摘要】本發(fā)明涉及應(yīng)用升級(jí)更新,特別是一種在web應(yīng)用中實(shí)現(xiàn)在線升級(jí)代碼的方法。本發(fā)明包括如下步驟:1:創(chuàng)建統(tǒng)一的提供服務(wù)接口;2:創(chuàng)建web應(yīng)用啟動(dòng)模塊,加載所有jar包到內(nèi)存;3:統(tǒng)一接口獲取內(nèi)存并實(shí)例化,處理后返回;4:放入更新jar包,啟動(dòng)更新模塊;5:判斷應(yīng)用是否已在更新狀態(tài),是,執(zhí)行步驟8;不在更新狀態(tài),執(zhí)行步驟6;6:更新模塊獲取jar包內(nèi)容,放到內(nèi)存中,完成更新;7:調(diào)用統(tǒng)一接口繼續(xù)提供服各;8:結(jié)束。本發(fā)明解決了應(yīng)用在運(yùn)行過程中需要升級(jí)代碼時(shí)需要重啟而導(dǎo)致服務(wù)暫時(shí)中斷的問題;可以用于web應(yīng)用在線升級(jí)。
【IPC分類】G06F9/445, H04L29/08, G06F9/54
【公開號(hào)】CN105468464
【申請(qǐng)?zhí)枴緾N201510827619
【發(fā)明人】鐘健波, 楊松, 季統(tǒng)凱
【申請(qǐng)人】國(guó)云科技股份有限公司
【公開日】2016年4月6日
【申請(qǐng)日】2015年11月25日