我有一个Web应用程序,配置为每3分钟执行一次作业。 因为没有必要更改我的库或添加我决定使用的任何人 spring本机执行任务执行器。 所以我用这种方式配置了我的xml文件:
<task:scheduled-tasks scheduler="taskScheduler">
<task:scheduled ref="job" method="doJob" fixed-rate="#{jobConfig['fixedTime']}" />
</task:scheduled-tasks>
<task:scheduler id="taskScheduler" pool-size="1"/>
我省略了job bean定义和doJob方法代码'导致不必要。
问题:
由于doJob方法将在我的情况下每3分钟触发一次, SPRING如何处理这种情况doJob方法需要超过固定速率的时间才能执行??
示例:
spring如何处理这种行为? 将第二次执行排队或跳过并永远丢失,直到新的触发执行?
答案 0 :(得分:0)
我不确定,但您可以使用fixed delay
(需要毫秒),然后在doJob
方法完成后等待3分钟。
答案 1 :(得分:0)
在fixedRate任务中,对于每次迭代,执行程序都会检查当前正在运行的线程数
corePoolSize
然后它会创建一个新线程,并以确切的fixedRate时间开始corePoolSize
但小于最大池大小,然后它会创建一个新线程并从确切的fixedRate
时间开始例如,如果您使用ThreadPoolTaskScheduler
,则最大池大小设置为Integer.MAX_VALUE
。