2013-05-17 3 views
0

Я пытаюсь использовать функцию @Scheduled. Я следил за this и this учебниками, но я не могу выполнить запланированную задачу.@ Запланированная задача не начинается

Я создал рабочий:

@Component("syncWorker") 
public class SyncedEliWorker implements Worker { 
    protected Logger logger = Logger.getLogger(this.getClass()); 

    public void work() { 
     String threadName = Thread.currentThread().getName(); 
     logger.debug(" " + threadName + " has began to do scheduled scrap with id=marketwatch2"); 
    } 
} 

и SchedulingService:

@Service 
public class SchedulingService { 
    protected Logger logger = Logger.getLogger(this.getClass()); 

    @Autowired 
    @Qualifier("syncWorker") 
    private Worker worker; 

    @Scheduled(fixedDelay = 5000) 
    public void doSchedule() { 
     logger.debug("Start schedule"); 

     worker.work(); 
     logger.debug("End schedule"); 
    } 
} 

И попробовал другую проводку в моем ApplicationContext. Окончательный вариант выглядит следующим образом:

<beans xmlns=... 
     xmlns:task="http://www.springframework.org/schema/task" 
     ... 
     xsi:schemaLocation=" .. 
          http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> 

    <context:annotation-config/> 

    <task:annotation-driven executor="taskExecutor" scheduler="taskScheduler"/> 
    <task:scheduler id="taskScheduler" pool-size="3"/> 
    <task:executor id="taskExecutor" pool-size="3"/> 

    ... Other beans... 
</beans> 

Сервер запускается без каких-либо ошибок.

Я что-то упустил?

ответ

8

<context:annotation-config /> не обнаруживает бобы - он просто обрабатывает аннотации на объявленных бобах. Это означает, что ваш @Service фактически не превращается в компонент.

Используйте вместо этого <context:component-scan base-package="com.yourcomany" />.

1

Я столкнулся с той же проблемой, но причина была другая. мне пришлось добавить в моем верхнем проекте следующее:

<task:annotation-driven /> 

При добавлении этого, не забудьте добавить в нужное место в контексте вашего приложения:

xmlns:task="http://www.springframework.org/schema/task" 

и:

http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd 
Смежные вопросы