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