2

我希望每 10 秒运行一次任务。当我在applicationContext.xml文件中声明 Bean 时,一切都按预期工作。当我简单地用 注释 Bean 时@Component,任务永远不会执行。我的代码/配置如下所示:

QueueProcessor.scala

package example.components

// imports removed for brevity

@Component
class QueueProcessor {

  @Scheduled(fixedDelay = 10000)
  def poll() = {
    println("polling queue")
  }

}

applicationContext.xml

<context:component-scan base-package="example.components" />
<task:executor id="genericExecutor" pool-size="2" />
<task:scheduler id="genericScheduler" pool-size="2" />
<task:annotation-driven executor="genericExecutor" scheduler="genericScheduler" />

<bean id="queueProcessor" class="example.components.QueueProcessor" />如果我只是在我的 , 中添加一行applicationContext.xml,那么任务会按预期每 10 秒执行一次。我已经验证了example.components包中的其他类正在通过注释进行实例化,因此没有发现这个类不应该是问题。

关于还有什么可能是错误的任何想法?

编辑:我将该行<task:annotation-driven executor="genericExecutor" scheduler="genericScheduler" />移至我的servlet.xml文件中。这解决了问题。这是否与读取文件的顺序有关?

4

3 回答 3

1

你的问题真的让我很困惑。我有一个几乎相同的设置的工作示例。当您使用注释时,它似乎没有被作为 Spring bean 拾取。您可以通过注释将依赖项注入到您的 QueueProcessor 类中,看看是否有效?这至少会告诉我们它是否作为 Spring bean 被适当地拾取。

于 2012-08-15T19:39:15.120 回答
0

要使注释起作用,请尝试添加以下行:

<context:annotation-config/>

这应该可以解决问题。

另见:http ://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-annotation-config

于 2012-08-15T20:02:44.313 回答
0

如已编辑问题中所述,将行<task:annotation-driven executor="genericExecutor" scheduler="genericScheduler" />移至servlet.xml文件解决了该问题。

于 2012-10-11T16:49:26.170 回答