0

我正在尝试使用 @Scheduled 功能。我已按照教程和教程进行操作,但无法执行我的计划任务。

我创建了一个工人:

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

和一个调度服务:

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

并在我的应用程序上下文中尝试了不同的接线。最终版本如下所示:

<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>

服务器启动时没有任何错误。

我错过了什么吗?

4

2 回答 2

8

<context:annotation-config />不检测 bean - 它只处理声明的 bean 上的注释。这意味着您@Service实际上并没有变成豆子。

改为使用<context:component-scan base-package="com.yourcomany" />

于 2013-05-17T06:56:17.197 回答
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
于 2015-01-25T10:13:39.893 回答