[Java] Использование @Scheduled и @EnableScheduling, но дает исключение NoSuchBeanDefinitionException


Answers

в соответствии с исключением Info «Не удалось найти компонент TaskScheduler по умолчанию», config должен определить «TaskScheduler», а не «Executor»,

@Configuration
public class AppContext extends WebMvcConfigurationSupport {
    @Bean
    public TaskScheduler taskScheduler() {
        return new ConcurrentTaskScheduler();
    }

    // Of course , you can define the Executor too
    @Bean
    public Executor taskExecutor() {
        return new SimpleAsyncTaskExecutor();
   }

}

Question

Я выполнил очень простые примеры онлайн, чтобы настроить задание cron в Spring, но я все время получаю эту ошибку в моем журнале запуска Tomcat каждый раз:

2015-05-25 00:32:58 DEBUG ScheduledAnnotationBeanPostProcessor:191 - 
Could not find default TaskScheduler bean org.springframework.beans.factory.NoSuchBeanDefinitionException: No 
qualifying bean of type [org.springframework.scheduling.TaskScheduler] is defined

2015-05-25 00:32:58 DEBUG ScheduledAnnotationBeanPostProcessor:202 - Could not    
find default ScheduledExecutorService bean
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying    
bean of type [org.springframework.scheduling.TaskScheduler] is defined

И 2 класса Java, используемые для реализации cron:

1) Класс @Configuration:

@Configuration
@EnableScheduling
public class ClearTokenStoreCronEnable {    
  final static Logger log =   
  LoggerFactory.getLogger(ClearTokenStoreCronEnable.class);
  private @Autowired TokenStoreRepository tokenStoreRepository; 
}

и класс работы Cron:

@Service
public class ClearTokenStoreWorkerService {

    final static Logger log = LoggerFactory.getLogger(ClearTokenStoreWorkerService.class);
    private @Autowired TokenStoreRepository tokenStoreRepository;

    //@Scheduled(fixedDelay=5000)
    //run daily at midnight
    @Scheduled(cron = "0 0 * * * *")
    public void tokenStoreTable() {
        log.debug("tokenstore table truncated - start");
        tokenStoreRepository.deleteAll();
        log.debug("tokenstore table truncated - end");
    }
}

Как побочная заметка, задание cron работает в полночь, но, похоже, оно также запускается случайным образом в другое время. Не уверен, что это ошибка, или мое выражение cron неверно: @Scheduled(cron = "0 0 * * * *")

Моя основная забота в это время - почему я получаю ошибки ScheduledAnnotationBeanPostProcessor ? Он ищет TaskScheduler и ScheduledExectorService. Мне просто нужно стрелять один раз в день. Я не выполняю параллельную обработку или мне нужно несколько потоков. В конечном счете эти ошибки вредны или мне нужно их исправить?