Spring Scheduler不起作用

问题描述 投票:17回答:11

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

}
spring spring-mvc scheduling
11个回答
24
投票

如果你想使用task:annotation-driven方法并且@Scheduled注释不起作用,那么你很可能在你的上下文xml中错过了context:component-scan。如果没有这一行,spring就无法猜测在哪里搜索注释。

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

0
投票

对我来说,在Spring 5中工作的解决方案是我必须将@Component添加到具有@Scheduled注释方法的类中。


-1
投票

只需在@Configuration注释的任何spring boot配置类中添加@EnableScheduling


34
投票

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

只需在WebMvcConfig类上添加@EnableScheduling即可

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

3
投票

我终于找到了解决方案。

应用程序的context.xml

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

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

和没有注释的test()方法。这每秒运行一次方法并且运行完美。


3
投票

如果你有dispatcher-servlet.xml那么移动你的配置。它对我有用,我在这篇文章中留下了评论:https://stackoverflow.com/a/11632536/546130


1
投票

您还应该检查lazy-init对于该bean是否为false或在bean中使用default-lazy-init="false"

这解决了我的问题。


1
投票

发生这种情况是因为默认情况下Spring lazy初始化bean。

通过放置此批注来禁用bean的延迟初始化

@Lazy(false)

在你的@Component之上。


1
投票

我的解决方案是在applicationContext.xml中添加:

<task:annotation-driven/>

使用以下schemaLocation:

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

0
投票

我们有以下原因:服务需要一个接口(由于Transaction注释) - IDE也将这个tx注释添加到接口。但@Scheduled正在实现服务类 - 而Spring忽略了它,因为它认为接口上只存在注释。所以要小心只有实现类的注释!


0
投票

我不得不更新我的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定义如下:

<bean id="scheduledTasks" class="com.vish.services.scheduler.ScheduledTasks"></bean>
© www.soinside.com 2019 - 2024. All rights reserved.