java - 線上應(yīng)用,如果數(shù)據(jù)庫(kù)操作失敗的話應(yīng)該如何處理?
問(wèn)題描述
求教,線上應(yīng)用,如果數(shù)據(jù)庫(kù)操作(insert,update,delete)失敗的話,處理邏輯應(yīng)該是如何?
將錯(cuò)誤返回給用戶?
不做處理?
在執(zhí)行一次?
還是?
問(wèn)題解答
回答1:操作失敗正常返回就行了 ,返回操作失敗的錯(cuò)誤碼,比如
success:false,message:更新/刪除失敗
但是作為開(kāi)發(fā)有一個(gè)原則就是,失敗的具體信息不能輸出到用戶操作界面,
打個(gè)比方,你更新一條數(shù)據(jù),更新失敗,是由于數(shù)據(jù)庫(kù)連接失敗,數(shù)據(jù)庫(kù)掛了之類的,你不可能把錯(cuò)誤信息輸出到用戶端,告訴用戶數(shù)據(jù)庫(kù)連接失敗吧
如果是sql報(bào)錯(cuò),這屬于應(yīng)用錯(cuò)誤了,一定要捕獲異常,將異常記錄在日志里
sql的相關(guān)操作一定要用try{}catch(){} 千萬(wàn)不能把異常流到上游,并且上游沒(méi)有做對(duì)異常處理的相關(guān)操作
批量操作一定要做好事務(wù),
回答2:當(dāng)然是找出所有捕獲到異常比如昵稱唯一,密碼不正確等等 其他的就返回未知異常,不要暴露自己的異常信息.
回答3:根據(jù)錯(cuò)誤碼給用戶返回信息吧,再執(zhí)行一次不建議,因?yàn)閷?duì)數(shù)據(jù)庫(kù)來(lái)說(shuō)可能會(huì)造成臟數(shù)據(jù)
回答4:現(xiàn)場(chǎng)還原:數(shù)據(jù)回滾至操作前。重不重試分場(chǎng)景,通用的原則是同步不重試,異步重試
異常處理:同步:異常包裝成可讀的錯(cuò)誤信息給用戶,提醒用戶重試。異步:監(jiān)控異常信息
