2013-09-30 26 views
0

我看到了各种线程在timertask问题。不过,我想要澄清一下Spring Scheduler API(3.1)的内部工作。春季实施 - 循环计时器

我有要求每10秒启动一个计时器。该应用程序在群集的websphere zos中运行。 (至少4个jvm节点)。

这是接线。

<bean id="dataProcessSchedulerTask" class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean"> 
    <property name="targetObject" ref="ondataTransferTimerWakeupService" /> 
    <property name="targetMethod" value="processDataFeedMetadata" /> 
</bean> 

<bean id="DATA_PROCESS_TIMER" 
    class="org.springframework.scheduling.timer.ScheduledTimerTask"> 
    <property name="timerTask" ref="DATAProcessSchedulerTask" /> 
    <property name="delay" value="#{systemProperties.DATA_PROCESS_TIMER}" /> 
    <property name="period" value="#{systemProperties.DATA_PROCESS_TIMER}" /> 
</bean> 

<bean class="org.springframework.scheduling.timer.TimerFactoryBean"> 
    <property name="scheduledTimerTasks"> 
    list> 
     <ref bean="DATA_PROCESS_TIMER" /> 
    </list> 
    </property> 
</bean> 
<bean id="onDATATransferTimerWakeupService" class="com.serviceimpl.OnDATATransferTimerWakeupService" /> 

我已经为processDataFeedMetadata方法定义了(@async)。

问题我看到定时器每10秒正确启动一次(4 jvms - 每24分钟发生一次定时器),在几小时后开始行为异常(2或3 jvms停止发射任何定时器 - 6到每分钟发生12次计时)。我了解timertask的实现有其自身的局限性。但是,如果我从MethodInvokingTimerTaskFactoryBean调用一个ASYNC方法,那么为什么timertask会在调用ASYNC方法时立即在该时间间隔内完成并且行为不当。 (2)我没有看到任何应用程序日志的异常,并且MethodInvokingTimerTaskFactoryBean应该处理并消耗任何异常(如果有)。

真的很感谢,如果有人对这里发生的事情有什么意见吗?

回答

0

你有这个问题,1个JVM?