來源:Kelanss 發(fā)布時(shí)間:2018-12-08 15:02:40 閱讀量:1080
今天遇到三個(gè)測試提過來的問題
1、測試新上傳的圖片獲取不到,返回的圖片名稱也是null -----圖片服務(wù)器掛了
原因開發(fā)環(huán)境的圖片服務(wù)器掛了
2、測試新建模板的時(shí)候失敗----服務(wù)器沒有啟動(dòng)相關(guān)服務(wù)
經(jīng)過排查原因測試環(huán)境的mongo服務(wù)器沒有啟動(dòng)我們項(xiàng)目mongo表對應(yīng)的服務(wù)
我的處理辦法:先切換到測試環(huán)境進(jìn)行測試確實(shí)存在這個(gè)問題,后來啟動(dòng)我本地進(jìn)行測試,我本地是好的,說明是測試的環(huán)境某個(gè)環(huán)節(jié)出問題了,打測試的包,切換host在本地進(jìn)行測試,程序報(bào)錯(cuò),鏈接不到某臺(tái)服務(wù)器,即測試環(huán)境的服務(wù)器的我們庫所在端口的服務(wù)沒有啟動(dòng)。
3、測試新建活動(dòng)失敗 ---redis 緩存的問題
在解決這個(gè)問題的時(shí)候就比較坑了,因?yàn)閯倓倓傉覝y試啟動(dòng)了斷了連接的mongo表所在的服務(wù)器,
所以排除了是環(huán)境問題,但是經(jīng)過跟蹤調(diào)試確實(shí)是程序里面的某個(gè)該去mongo表里面取值的地方?jīng)]有獲取到值,導(dǎo)致后面出現(xiàn)的異常問題,
這時(shí)控制臺(tái)報(bào)錯(cuò)有異常拋錯(cuò),過了一會(huì)又出現(xiàn)mongo連接不上的異常,再次詢問測試的環(huán)境搭建人員查找原因,得到的原因如下:
“剛剛啟動(dòng)命令少加了后臺(tái)運(yùn)行的參數(shù)?!?/span>
好了解決完了這個(gè)問題應(yīng)該都OK了吧,但是還沒結(jié)束。。。
控制臺(tái)雖然沒有再報(bào)連接不上mongo所在那臺(tái)服務(wù)器的錯(cuò)誤,但是異常信息仍然存在,依然一個(gè)值獲取為空導(dǎo)致的異常:
哈哈下面來看看這個(gè)值獲取的代碼吧:
public PagePrototype findPagePrototypeCached(Long id) {
String key = CacheConstants.getPagePrototypeCacheKey(id);
PagePrototype prototype = redisUtil.getObject(key, PagePrototype.class);
if(prototype != null){
return prototype;
}
prototype = pagePrototypeDao.queryById(id);
if (prototype != null) {
String contentPath = prototype.getContentPath();
prototype.setContent(fileEntryManager.getFileContent(contentPath,MongoTable.TABLE_PAGE_PROTOTYPE));
String demoPath = prototype.getDemoPath();
prototype.setDemo(fileEntryManager.getFileContent(demoPath,MongoTable.TABLE_PAGE_PROTOTYPE));
redisUtil.setObjectByExpire(key, prototype,CacheConstants.CACHE_ONE_WEEK);
}
return prototype;
}
這里呢某個(gè)重要值就是Demo啦,跟據(jù)我們的代碼可以看到Demo值是不可能為空的,因?yàn)樵诔跏蓟M(jìn)來的時(shí)候就會(huì)
prototype.setDemo(fileEntryManager.getFileContent(demoPath,MongoTable.TABLE_PAGE_PROTOTYPE));
通過這句去mongo里面取值set進(jìn)去。
好了巧合來了:
剛剛我們的mongo掛了,所以第一次進(jìn)來的時(shí)候當(dāng)然沒走緩存,因?yàn)檫€沒有這個(gè)key值,然后就去我們的mongo表里面查找唄,剛好mongo也掛了,所以就沒有從我們mongo表里面獲取到數(shù)據(jù),fileEntryManager.getFileContent(demoPath,MongoTable.TABLE_PAGE_PROTOTYPE)
程序繼續(xù)向下執(zhí)行就把沒有獲取到數(shù)據(jù)的這個(gè)對象放到了我們的緩存里面,方便下次用。。。。
所以就造成了我們后面修復(fù)了mongo,對象里面的值還是沒有獲取到,
原因是后面程序都是從緩存取值,緩存剛好存的是之前沒有獲取到值的時(shí)候的對象。
像這種原因只有看代碼才找的到的??!
前面確實(shí)是環(huán)境掛了的問題,后面說說我們程序的問題吧,像這種問題我們可以在程序里面處理一下那個(gè)可能為空的值,當(dāng)為空的時(shí)候應(yīng)該把錯(cuò)誤打出來,這樣才方便查找定位問題的所在,不至于浪費(fèi)一下午的時(shí)間排除問題!
---------------------