我有以下配置来运行任务-
<bean id="trendDataJob" class="com.ge.og.realtrack.scheduler.TrendDataJob"> </bean>
<task:scheduled-tasks>
<task:scheduled ref="trendDataJob" method="trendJob" cron="#{trendDataJob.configMap['corn_exp']}"></task:scheduled>
<task:scheduled ref="trendDataJob" method="metaDataTrendJob" cron="#{trendDataJob.configMap['metadata_corn_exp']}"></task:scheduled>
</task:scheduled-tasks>
为此,cron表达式每分钟运行一次。
这是一个问题,因为TrendDataJob的两种方法都计划每分钟运行一次,但是它们在一个第一个TrendJob完成后又一个接一个地执行,而其执行的metaDataTrendJob却无法理解这种行为。
还有一个问题是方法要花费一分钟以上才能完成操作。在当前调用完成并返回之前,它不会触发下一个调用。
最佳答案
默认情况下,调度程序使用带单个线程的ConcurrentTaskScheduler
。如果要另一个配置它,并将其传递给scheduled-tasks
scheduler
属性。
在XML中,最简单的方法是使用scheduler
元素。 (请参阅参考指南中的this section)。
<task:scheduler id="scheduler" pool-size="10"/>
然后只需将其注册到其他元素上即可。
<task:scheduled-tasks scheduler="scheduler"> ...
关于java - 为什么Spring Task Scheduler无法同时执行任务?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37434403/