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