2011-01-27 137 views
13

我有一個問題,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 <<<"); 
    } 

} 
+0

我沒有得到任何錯誤,我希望記錄>>>計劃測試服務<<<`沒有發生的消息... – user219882 2011-01-27 14:20:49

+1

是您的記錄器配置正確,日誌級別是否正確? – 2011-01-27 14:24:24

回答

21

如果你想使用task:annotation-driven的方法,你的@Scheduled註解不起作用,那麼你很可能在你的上下文xml中錯過了context:component-scan。 沒有這條線,春天無法猜測在哪裏搜索您的註釋。

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

你救了我的生命Serkan Arikusu!豎起大拇指! – TchiYuan 2013-01-22 03:24:37

3

我終於找到了解決辦法。

應用的context.xml

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

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

和不具有註釋的test()方法。這種方法每秒運行一次,並且完美地工作。

+1

由於您離開了「任務:註解驅動」方法,因此這確實可行。你我看看失敗線的另一個答案。乾杯 – 2012-06-22 14:10:54

1

你還應該檢查lazy-init爲該bean的false或在beans中使用default-lazy-init="false"

這解決了我的問題。

0

這是默認春天,因爲發生懶初始化豆。

禁用延遲初始化爲bean通過將該註釋

@Lazy(false) 

@Component的頂部。

0

我們有以下原因: 服務需要一個接口(由於事務註釋) - IDE還將此tx註釋添加到接口。但@Scheduled是在實現服務類 - 而Spring忽略它,因爲它認爲只有註釋存在於界面上。所以要小心只對實現類有註釋!