복붙노트

[SPRING] Spring 3.2 "@Scheduled"주석에 대한 예외 처리

SPRING

Spring 3.2 "@Scheduled"주석에 대한 예외 처리

봄에서 "@Scheduled"주석에 대한 예외 처리를 사용자 정의하는 방법은 무엇입니까?

서버 (Tomcat 6)에서 트리거되는 cron 작업이 있으며 예외가 발생하면 처리해야합니다.

봄 버전 3.2 톰캣 서버 6

해결법

  1. ==============================

    1.스케쥴링 어노테이션에 사용되는 ThreadPoolTaskScheduler에 대한 ErrorHandler를 구현하고 등록 할 수 있습니다.

    스케쥴링 어노테이션에 사용되는 ThreadPoolTaskScheduler에 대한 ErrorHandler를 구현하고 등록 할 수 있습니다.

     <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. ==============================

    2.Java Config를 사용하려면 SchedulingConfigurer를 구현하는 구성을 만들어야합니다.

    Java Config를 사용하려면 SchedulingConfigurer를 구현하는 구성을 만들어야합니다.

    @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);
        }
    }
    

    필요에 따라 오류 처리기를 수정할 수 있습니다. 여기에는 메시지 만 기록합니다.

    taskScheduler.initialize ();를 호출하는 것을 잊지 마십시오. 그것 없이는 얻을 것이다 :

    java.lang.IllegalStateException: ThreadPoolTaskScheduler not initialized
    
  3. ==============================

    3.비즈니스 로직을 랩핑하고 @schedule 메소드에서 간단한 try catch를 사용해 보시지 않겠습니까? 그런 다음 실패 사례에 필요한 조치를 기록하거나 취할 수 있습니다.

    비즈니스 로직을 랩핑하고 @schedule 메소드에서 간단한 try catch를 사용해 보시지 않겠습니까? 그런 다음 실패 사례에 필요한 조치를 기록하거나 취할 수 있습니다.

    @Scheduled(cron = "${schedulerRate}")
    public void scheduledJob() {
        try {
            businessLogicService.doBusinessLogic();
        } catch (Exception e) {
            log.error(e);
        }
    }
    
  4. from https://stackoverflow.com/questions/24031613/exception-handling-for-spring-3-2-scheduled-annotation by cc-by-sa and MIT license