我有以下配置来运行任务-

<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/

10-12 04:15