ThreadPoolTaskExecutor提供TaskDecorator可以實現類似ThreadPoolExecutor.afterExecute()類似功能
taskDecorator主要是對Runnable任務裝飾一下, 在任務執行時完成異常日志打印、ThreadLocal清理等功能
但是對Callable任務(由submit()方法提交的任務),這個taskDecorator雖然也能裝飾,但是並不能捕獲異常, 因為類似FutureTask的run方法內部自己補獲了異常,不會拋出到afterExecute方法中
要想捕獲類似FutureTask的異常,需要手動調用get(), 參考ThreadPoolExecutor.afterExecutor()的doc注釋
最終在ThreadPoolTaskExecutor中的樣子大概如下:
submit()任務最終也會走execute()