Я немного одурманен, потому что я пытаюсь использовать аннотации @Scheduled
, но Spring, похоже, не находит мои методы. Конечным результатом является то, что ни один из моих методов, аннотированных с помощью @Scheduled
, не выполняется.
Я вызвал магию задач Spring со следующими объявлениями:
<beans> <!-- XMLNS, XSD declarations omitted for brevity -->
<context:component-scan base-package="com.mypackage"/>
<task:executor id="executor" pool-size="5"/>
<task:scheduler id="scheduler" pool-size="5"/>
<task:annotation-driven scheduler="scheduler" executor="executor"/>
</beans>
И у меня есть интерфейс, который выглядит примерно так:
package com.mypackage;
public interface MyInterface {
public void executePeriodically();
}
С соответствующим импотентом:
package com.mypackage.impl;
// imports omitted for brevity
@Service
public class MyInterfaceImpl implements MyInterface {
@Scheduled(cron = "0/5 * * * * ?")
public void executePeriodically() {
System.out.println("The time is now : " + new Date());
}
}
Теперь ожидаемый результат состоит в том, что у меня очень шумный маленький парень, рассказывающий мне, в какое время это каждые 5 секунд... но на самом деле я ничего не получаю. Я попытался с аннотацией по методу интерфейса и методу impl, но это ничего не меняет.
Я точно знаю, что исполнитель и планировщик инициализируются, потому что в моем журнале есть следующее:
INFO - ThreadPoolTaskExecutor - Initializing ExecutorService
INFO - XmlWebApplicationContext - Bean 'executor' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO - XmlWebApplicationContext - Bean 'executor' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO - ThreadPoolTaskScheduler - Initializing ExecutorService 'scheduler'
INFO - XmlWebApplicationContext - Bean 'scheduler' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
Я не уверен, что эта линия о том, что вы не имеете права, имеет значение или красная селедка.
В настоящий момент я работаю над этим, объявляя свои запланированные задачи следующим образом:
<task:scheduled-tasks>
<task:scheduled ref="sourceDocumentManagerImpl" method="deleteOldDocuments" cron="0 0 * * * ?"/>
</task:scheduled-tasks>
Пока это работает отлично, я бы скорее использовал аннотации, потому что гораздо удобнее видеть непосредственно в коде, какие ожидания для этого метода. Кто-нибудь знает, что я могу делать неправильно? Для записи я использую Spring 3.0.4
Спасибо, куча!