本篇內(nèi)容主要講解“Java健壯性的方法有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java健壯性的方法有哪些”吧!
創(chuàng)新互聯(lián)"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營(yíng)銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營(yíng)銷需求!創(chuàng)新互聯(lián)具備承接各種類型的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作項(xiàng)目的能力。經(jīng)過10多年的努力的開拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評(píng)。
一、進(jìn)行統(tǒng)一的業(yè)務(wù)處理響應(yīng)
根據(jù)螞蟻金服開放平臺(tái)的標(biāo)準(zhǔn)返回,一個(gè) response 至少應(yīng)當(dāng)有4個(gè)返回值。
1、isSuccess 調(diào)用是否成功
2、data 返回的響應(yīng)數(shù)據(jù)
3、errorCode 錯(cuò)誤碼
4、errorMsg 錯(cuò)誤信息
這就要求我們的接口要有標(biāo)準(zhǔn)的統(tǒng)一的 response ,那怎么實(shí)現(xiàn)呢?
1、Spring 切面, JDK 動(dòng)態(tài)代理,Cglib 動(dòng)態(tài)代理等用代理類實(shí)現(xiàn)
2、匿名子類,使用一個(gè)公共的 Executor 來負(fù)責(zé)處理所有的請(qǐng)求。
上面兩種模式都可以實(shí)現(xiàn)標(biāo)準(zhǔn)的 response 的封裝,那么具體要封裝哪些東西呢?其實(shí)最主要的就是統(tǒng)一的 try catch,防止出現(xiàn)任何的 500 錯(cuò)誤給到調(diào)用方。
------ 為什么要在最外層去完成呢?------
因?yàn)?500 錯(cuò)誤對(duì)于調(diào)用方來說是致命而且是毫無(wú)價(jià)值的,無(wú)論調(diào)用方是前端還是其他的業(yè)務(wù)系統(tǒng)
------ 設(shè)定統(tǒng)一的錯(cuò)誤碼 ------
如
參數(shù)錯(cuò)誤 PARAMETER_ERROR
數(shù)據(jù)庫(kù)錯(cuò)誤 DATABASE_ERROR
外部系統(tǒng)錯(cuò)誤 OUTER_SYSTEM_ERROR
如果有了上面的這些錯(cuò)誤碼以及錯(cuò)誤信息,業(yè)務(wù)方至少可以告知用戶究竟發(fā)生了什么事,也可以設(shè)定一些列的告警以及自動(dòng)化運(yùn)維的方式來處理這些錯(cuò)誤。
二、參數(shù)檢查
在進(jìn)行真正的邏輯處理前,應(yīng)當(dāng)對(duì)入?yún)⑦M(jìn)行一系列的校驗(yàn),以保持后續(xù)業(yè)務(wù)處理邏輯的輕量,這也是 fast fail 思想的指導(dǎo),有錯(cuò)誤盡早結(jié)束處理。
具體是怎樣的呢?我們假設(shè)參數(shù)為 m.
if( null == m ){return ;}
進(jìn)行空判斷,防止后續(xù)滴啊用m發(fā)生 NullPointerException,但這里也不建議拋出NPE,因?yàn)榭吹饺罩疽矔?huì)很迷惑。
if( StringUtils.isEmpty( m ) ){return ;}
字符串是否為空串
if( CollectionUtils.isEmpty.isEmpty( m ) ){return ;}
集合是否為空或者null
try{
JSON.parseObject( m );
return true;
}
catch(JSONExceptin e){
return false;
}
判斷字符串是否為 JSON 格式
三、重試機(jī)制
對(duì)于特定的外部系統(tǒng)錯(cuò)誤,可以嘗試多次重試這種策略,當(dāng)然這也是簡(jiǎn)歷在對(duì)方的服務(wù)是冪等的前提下。這樣做在某些網(wǎng)絡(luò)不穩(wěn)定的情況下可以提高響應(yīng)成功率。
四、冪等機(jī)制
什么叫冪等?意思就是 無(wú)論何時(shí)何處何人,只要是先攻的請(qǐng)求,就應(yīng)當(dāng)有相同的響應(yīng),直到到達(dá)終態(tài)。
這個(gè)原則并不關(guān)注上一次的執(zhí)行結(jié)果,企鵝本次結(jié)果不應(yīng)當(dāng)因?yàn)樯弦淮握?qǐng)求的部分成功或者失敗而導(dǎo)致某些中間狀態(tài)不一致導(dǎo)致請(qǐng)求失敗。
五、Lambda
Optionl.of( target )
.getOrElse( new ArrayList() )
.filter( Object::NotNull)
.forEach( () -> {} )
這種寫法可以確保絕大部分的異常不出現(xiàn),特別是在對(duì)于集合進(jìn)行處理的時(shí)候,因?yàn)榧现兄灰衅渲幸粋€(gè)值是會(huì)導(dǎo)致程序失敗的,整個(gè)程序都會(huì)報(bào)錯(cuò)。這樣寫因?yàn)閷?duì)數(shù)據(jù)做了比較多的檢查和兼容,所以出現(xiàn)錯(cuò)誤的概率會(huì)比較低,但也會(huì)有一個(gè)弊端,就是當(dāng)這樣的程序都出現(xiàn)異常的時(shí)候,開發(fā)者一般不知從何查起,要定位出是哪行數(shù)據(jù)就已經(jīng)很費(fèi)勁了。
到此,相信大家對(duì)“Java健壯性的方法有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!