Spring Schedule task 添加 error-hander


原因來自於系統有兩天定時任務執行失敗,查閱日志時,只能看到
Unexpected error occurred in scheduled task.

在Spring 源碼中,可以從TaskUtils中看出端倪,Spring 默認提供的定時任務處理器是
LoggingErrorHandler

private static class LoggingErrorHandler implements ErrorHandler {

   private final Log logger = LogFactory.getLog(LoggingErrorHandler.class);

   @Override
   public void handleError(Throwable t) {
      if (logger.isErrorEnabled()) {
         logger.error("Unexpected error occurred in scheduled task.", t);
      }
   }
}

那么為了能夠在定時任務發生異常時看到完整的異常信息,需要我們特別配置下

主要的工作還是在Spring.xml

一般地,想要使用Spring基於注解的定時任務,我們只需要在XML文件中配置

<task:annotation-driven/> 

所以加入自己的配置也很簡單,只需要展開即可。默認情況下,Spring 啟用的是 org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler,我們不改變這個依舊配置
ThreadPoolTaskScheduler為任務調度

<task:annotation-driven scheduler="default" />
//加入一些個性配置,比如線程池大小
<bean name="taskDefault" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
    <property name="poolSize" value="5"/>
//配置自定義異常處理
    <property name="errorHandler" ref="scheduleTaskErrorHandler"/>
</bean>
//注冊到Spring 容器
<bean name="scheduleTaskErrorHandler" class="com.ScheduleTaskErrorHandler"/>

ScheduleTaskErrorHandler.java

@Override
public void handleError(Throwable throwable) {
   logger.error("Schedule task throw exception msg is {}");
   throwable.printStackTrace();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM