2011-01-27 4 views
13

У меня есть проблема с аннотаций задач на основе планировщика Spring, - я не могу заставить его работать, я не вижу никаких проблем здесь ...Spring планировщик не работает

приложений context.xml

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

боб

@Service 
public final class SchedulingTest { 

    private static final Logger logger = Logger.getLogger(SchedulingTest.class); 

    @Scheduled(fixedRate = 1000) 
    public void test() { 
     logger.debug(">>> Scheduled test service <<<"); 
    } 

} 
+0

У меня нет ошибок, и я ожидаю зарегистрировать сообщение «>>> Scheduled test service <<<', которое не произойдет ... – user219882

+1

правильно настроен ваш логгер с соответствующим уровнем журнала? –

ответ

21

Если вы хотите использовать подход task:annotation-driven, и ваша аннотация @Scheduled не работает, вы, скорее всего, пропустили context:component-scan в своем контексте xml. Без этой строки весна не может догадаться, где искать ваши аннотации.

<context:component-scan base-package="..." /> 
+1

Вы спасли мою жизнь Serkan Arikusu! Пальцы вверх! – TchiYuan

3

я, наконец, нашел решение.

приложения context.xml

<bean id="schedulingTest" class="...SchedulingTest" /> 

<task:scheduled-tasks> 
    <task:scheduled ref="schedulingTest" method="test" cron="* * * * * ?"/> 
</task:scheduled-tasks> 

test() и метод без аннотации. Это работает каждый раз и работает отлично.

+1

Это, безусловно, работает с тех пор, как вы оставили метод «задача: аннотация». Вы смотрите на другой ответ на недостающую строку. Cheers –

1

Вы должны также проверить отложенной инициализации ложным для этого компонента или использовать default-lazy-init="false" в бобах.

Это решило мою проблему.

22

Spring @Configuration (non-xml configuration) for annotation-driven tasks

Просто добавьте @EnableScheduling на вас WebMvcConfig класс

@Configuration 
@EnableWebMvc 
@EnableAsync 
@EnableScheduling 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 
    /** Annotations config Stuff ... **/ 
} 
+0

добавление @EnableScheduling сэкономило мое время. Огромное спасибо –

0

Это происходит потому, что по умолчанию Spring ленивым инициализирует бобы.

Отключить ленивая инициализация для компонента, помещая эту аннотацию

@Lazy(false) 

на верхней части @Component.

0

У нас была следующая причина: Для обслуживания необходим интерфейс (из-за аннотации транзакции). IDE добавила эту аннотацию tx также к интерфейсу. Но @Scheduled занимался внедрением класса сервиса - и Spring проигнорировал его, поскольку считал, что на интерфейсе существуют только аннотации. Поэтому будьте осторожны, чтобы иметь только аннотации по реализации классов!