我看到了各种线程在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应该处理并消耗任何异常(如果有)。
真的很感谢,如果有人对这里发生的事情有什么意见吗?