2011-06-29 22 views
2

我在春天應用程序上下文XML定義一個Spring任務:自動取消春季任務的異常

<task:scheduler id="myScheduler" pool-size="1"/> 

<task:scheduled-tasks scheduler="myScheduler"> 
    <task:scheduled ref="MyClass" method="myMethod" fixed-delay="3000"/> 
</task:scheduled-tasks> 

那麼,如何可以實現停止的任務繼續執行在出現異常的情況下,無論是在xml或通過捕獲異常代碼?

回答

2

我不認爲這是可以解決的使用scheduled-tasks,當然可能是錯的。

有一個替代不過,配置:

<task:annotation-driven scheduler="scheduler" /> 

<bean id="scheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler"> 
    <property name="poolSize" value="5" /> 
    <property name="errorHandler" ref="scheduledTaskErrorHandler" /> 
</bean> 

<bean id="scheduledTaskErrorHandler" class="boo.ScheduledTaskErrorHandler" /> 

而且的ErrorHandler:

public class ScheduledTaskErrorHandler implements ErrorHandler { 

@Override 
public void handleError(Throwable t) { 
     // do something, like shutdown the scheduler 
} 
} 
+0

您好,我想這(Grails中): 'context.'component掃描 '(' base-package':「sk.dvsk.messagesplitter」)' 'myScheduler(org.springframework.scheduling.concurrent.ThreadPoolTask​​Scheduler){' \t \t''poolSize = 1' \t \t'的ErrorHandler = REF( 'splitterTaskErrorHandler')' \t'}' \t'task.'annotation主導'(myScheduler)' 但有2個問題:錯誤處理程序不調用有關異常。我不能通過callind shutdown或destroy方法關閉調度器(注入執行器並捕獲異常)。 – csviri

+0

我不知道關於grails,你確定如果有什麼應該與java一起工作,它也應該與grails?你可以檢查與Java? – abalogh

+0

這些認爲與java的工作應與groovy一起工作。我嘗試了一個獨立的應用程序,其中shutdown工作正常,但是當從調度方法拋出異常時不會調用錯誤處理程序。 (當我從調度方法調用shutdown時,它被認爲是在這裏,而不是在grails中:s) – csviri