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

あなたの問題は本当に私を困惑させます。ほぼ同じ設定の実例があります。アノテーションを使用すると、SpringBeanとして取り上げられていないようです。アノテーションを介してQueueProcessorクラスに依存関係を挿入し、それが機能するかどうかを確認できますか?それは少なくともそれが春の豆として適切に拾われているかどうかを教えてくれます。

于 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 に答える