Java 任务执行并发性
我有一个web应用程序配置为每3分钟执行一次作业。 因为没有必要更改我的LIB或添加我决定使用的任何人 任务执行器的spring本机实现。 因此,我将xml文件配置为:Java 任务执行并发性,java,spring,task,job-scheduling,Java,Spring,Task,Job Scheduling,我有一个web应用程序配置为每3分钟执行一次作业。 因为没有必要更改我的LIB或添加我决定使用的任何人 任务执行器的spring本机实现。 因此,我将xml文件配置为: <task:scheduled-tasks scheduler="taskScheduler"> <task:scheduled ref="job" method="doJob" fixed-rate="#{jobConfig['fixedTime']}" /> </task:schedul
<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"/>
由于不必要,我省略了作业bean定义和doJob方法代码
问题:
因为doJob方法在我的情况下每3分钟触发一次,
SPRING如何处理case doJob方法需要超过固定速率的时间来执行
例如:
时间=0时
doJob被触发
doJob需要4分钟才能完成,因为它会执行一些繁重的db操作
时间=3分钟
应触发doJob,但上一次执行尚未终止
spring如何处理这种行为?
在新的触发器执行之前,第二次执行是否会排队或跳过并永远丢失?我不确定,但您可以使用fixed delay以毫秒为单位,然后它将在doJob方法完成后等待3分钟。在fixedRate任务中,对于每次迭代,执行者都会检查当前运行的线程数 小于corePoolSize,则会创建一个新线程,并在确切的fixedRate时间开始 大于corePoolSize但小于最大池大小,则会创建一个新线程并在确切的fixedRate时间开始 等于最大池大小,则执行将丢失
例如,如果您使用的是ThreadPoolTaskScheduler,则最大池大小设置为Integer.MAX_值 roytuts.com/how-to-concurrence-execute-tasks-using-java-in-spring/