Exception Handling for Spring 3.2 "@Scheduled" Annotations

How to configure exception handling for @Scheduled annotation from spring?

I have cron jobs that will run on the server (Tomcat 6), and when some exceptions occur, I need to do some processing.

Spring version 3.2 Tomcat 6 server

+7
spring spring-scheduled exception-handling quartz-scheduler
source share
3 answers

You can implement and register ErrorHandler for ThreadPoolTaskScheduler , which is used for your planning annotations.

  <task:annotation-driven scheduler="yourThreadPoolTaskScheduler" /> <bean id="yourThreadPoolTaskScheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler"> <property name="poolSize" value="5" /> <property name="errorHandler" ref="yourScheduledTaskErrorHandler" /> </bean> <bean id="yourScheduledTaskErrorHandler" class="com.example.YourScheduledTaskErrorHandler"/> 
+2
source share

If you want to use Java Config, you will need to create a SchedulingConfigurer configuration

 @EnableScheduling @Configuration class SchedulingConfiguration implements SchedulingConfigurer { private final Logger logger = LoggerFactory.getLogger(getClass()); private final ThreadPoolTaskScheduler taskScheduler; SchedulingConfiguration() { taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setErrorHandler(t -> logger.error("Exception in @Scheduled task. ", t)); taskScheduler.setThreadNamePrefix("@scheduled-"); taskScheduler.initialize(); } @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(taskScheduler); } } 

You can change the error handler for your needs. Here I am only logging a message.

Remember to call taskScheduler.initialize (); . Without this, you will receive:

 java.lang.IllegalStateException: ThreadPoolTaskScheduler not initialized 
+5
source share

Why not wrap your business logic and try to catch your @schedule method. You can then register or take any actions necessary for failures.

 @Scheduled(cron = "${schedulerRate}") public void scheduledJob() { try { businessLogicService.doBusinessLogic(); } catch (Exception e) { log.error(e); } } 
0
source share

All Articles