タスクを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
ファイルに移動しました。それで問題は解決しました。これは、ファイルが読み取られる順序と関係がありますか?