Подтвердить что ты не робот

Spring Планировщик не работает

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

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

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

bean

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

}
4b9b3361

Ответ 1

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

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

Ответ 3

Наконец-то я нашел решение.

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

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

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

и test() без аннотации. Этот метод выполняется каждую секунду и отлично работает.

Ответ 4

если у вас есть dispatcher-servlet.xml, переместите туда свою конфигурацию. он работал у меня, и я оставил комментарий в этой статье: fooobar.com/questions/245019/...

Ответ 5

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

Отключите ленивую инициализацию для bean, разместив эту аннотацию

@Lazy(false)

поверх @Component.

Ответ 6

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

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

Ответ 7

Решением для меня было добавить в applicationContext.xml:

<task:annotation-driven/>

со следующей схемой:

http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd

Ответ 8

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

Ответ 9

Мне пришлось обновить свой dispatcher-servlet.xml с помощью

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

Определение бина ниже:

<bean id="scheduledTasks" class="com.vish.services.scheduler.ScheduledTasks"></bean>

Ответ 10

Для меня решение, которое работало в Spring 5, заключалось в том, что мне пришлось добавить @Component в класс с аннотированными методами @Scheduled.

Ответ 11

Просто добавьте @EnableScheduling в любой класс конфигурации весенней загрузки, аннотированный @Configuration, а для метода, выполняющего задание расписания, добавьте аннотацию @Scheduled.