聲明:JUMP文章僅作學習用途
基本設計思想
- 系統所發生的任何異常或者錯誤對操作用戶來說都是系統”運行時”異 常,都是這個應用系統內部的異常。
- 異常轉譯是針對所有繼承Throwable超類的類而言的,從編程的語法角度講,其子類之間都可以相互轉換。
- 將這些檢查異常Exception和錯誤Error轉換爲 RuntimeException異常,讓程序員根據情況來決定是否捕獲和處理所發生的異常。
設計異常機制
1,異常碼設計
設計10爲=四位應用系統編號+兩位模塊編號+四位應用錯誤碼
四位應用錯誤從0000~9999,其中特別設計配置錯誤,校驗錯誤,邏輯錯誤,系統錯誤等所處在的範圍,如配置錯誤是6000~6999。
2,異常碼定義
創建異常碼文件:jump_errors.properties、jump_errors_en.properties、messages.properties、values.properties等
放置異常碼文件:com.bocom.jump.config_xxx
應用配置
<x:bean id="messageProvider" class="com.bocom.jump.xxx.DefaultMessageProvider">//提供默認的消息組裝,獲得
<x:property name="dataDictionary" ref="dataDictionary"/>
<x:property name="defaultErrorKey" ref="unknown"/>
<x:property name="valuesMessageSource" >
<x:bean
class="com.bocom.bbip.support.message.ReloadableResourceBundleMessageSource"/>
//裝載message資源文件,獲取消息格式,文件,時間戳等
<x:property name="useCodeAsDefaultMessage" vaule="true"/>
<x:property name="basenmaes" vaule="classpath*:config/msg/errors"/>
<x:property name="cacheSeconds" vaule="-1"/>
<x:property name="defaultEncoding" vaule="UTF-8"/>
</x:bean>
</x:property>
<x:property name="errorMessageSource" >
<x:bean
class="com.bocom.bbip.support.message.ReloadableResourceBundleMessageSource"/>
<x:property name="useCodeAsDefaultMessage" vaule="false"/>
<x:property name="basenmaes" vaule="classpath*:config/msg/values"/>
<x:property name="cacheSeconds" vaule="-1"/>
<x:property name="defaultEncoding" vaule="UTF-8"/>
</x:bean>
</x:property>
<x:property name="defaultMessageSource" >
<x:bean
class="com.bocom.bbip.support.message.ReloadableResourceBundleMessageSource"/>
<x:property name="useCodeAsDefaultMessage" vaule="true"/>
<x:property name="basenmaes" vaule="classpath*:config/msg/messages"/>
<x:property name="cacheSeconds" vaule="-1"/>
<x:property name="defaultEncoding" vaule="UTF-8"/>
</x:bean>
</x:property>
3,異常碼輸出
前面有解釋異常碼的設計,下面給出具體配置
一:定義一個全局系統配置bean
<x:bean id="systemCode" class="com.bocom.jump.xxx.SystemConfig">
<x:property name="systemCode" valuse="${system.code}"/>//動態加載4位系統簡稱
</x:bean>
二:在異常處理bean定義中增加屬性“rebuildMessageCode”設置
<x:bean id="excepitonHandler" class="com.bocom.jump.channel.interceptors.DefaultExceptionHandler">
<x:property name="messageProvider" ref="messagesProvider"/>
<x:property name="messageCodeMapping"
<x:map />
</x:property>
<!--添加個性配置true:以應用簡稱打頭輸出,false:保持原樣以JUMP字符打頭輸出-->
<!--<<x:property name="rebuildMessageCode" value="ture"/>>-->
</x:bean>
*附上默認異常處理類部分代碼(DefaultExceptionHandler)
public class DefaultExceptionHandler implements ExceptionHandler{
//定義私有成員變量。加上set方法
private String xx;...
//構造函數:初始化參數
public DefaultExceptionHandler(){
a="errorCode";b="errorMsg";c="JUMP[A-Z]{2}[0-9]{4}";h=true;i=false;
}
}
自定義系統異常
1,基礎類
業務邏輯處理異常(Bussiness Excepiton)
運行期系統級異常(Runtime Exception)
數據庫處理異常(DB Exception)
通訊異常(Communication Exctpion)
2,處理策略
業務邏輯處理異常(Bussiness Excepiton)
: 都以JUMPXX的CoreExcepiton拋出錯誤碼,對應錯誤信息統一由配置的exception handler統一處理。
運行期系統級異常(Runtime Exception)
: 由JUMPXX技術處理爲JUMPXX錯誤碼拋出,平臺統一的exception handler配置對應的錯誤碼,及錯誤信息,當出現運行期異常時,也能返回相應的錯誤信息給請求方。
數據庫處理異常(DB Exception)
: 系統再通訊代碼端,一定要捕獲相應異常,轉化爲CoreExcepiton業務邏輯異常拋出。
通訊異常(Communication Exctpion)
: 系統中不做處理,JUMPXX會當作捕獲後包裝成JUMPXX的異常拋出,並能被統一的異常處理對象處理。