Solon 開發進階,五、全域性異常訂閱
阿新 • • 發佈:2022-01-16
所謂“全域性異常”,是指通過事件匯流排釋出的異常。目前框架會把未吃掉的異常釋出到事件匯流排。比如:啟動時產生的異常,或者計劃任務未處理的異常,或請求中未處理的異常。
事件匯流排預設會用 "err.printStackTrace()" 自動列印。如果希望 禁掉 自動列印:
Solon.start(DemoApp.class, args, app->{
app.enableErrorAutoprint(false);
});
或者對異常進行訂閱,訂閱後也會 禁掉
1、手動訂閱
//獲取系統未處理的異常
Solon.start(DemoApp.class, args, app->{
app.onError(e->{
//或者記錄到日誌系統,或者別的處理
e.printStackTrace();
});
});
或者用“SolonBuilder”,在啟動前就進行訂閱:
new SolonBuilder().onError(e -> { //或者記錄到日誌系統,或者別的處理 e.printStackTrace(); }).start(DemoApp.class, args);
2、註解訂閱
@Component
public class ErrorListener implements EventListener<Throwable> {
@Override
public void onEvent(Throwable e) {
//或者記錄到日誌系統,或者別的處理
e.printStackTrace();
}
}
上面提到“全域性異常”,也會包括請求產生的未處理異常。反之,被過濾器吃掉的異常,這裡就不會出現了(可參考 《過濾器、處理、攔截器》 )。
建議請求類的異常交由過濾器處理。