Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 任务执行并发性_Java_Spring_Task_Job Scheduling - Fatal编程技术网

Java 任务执行并发性

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

我有一个web应用程序配置为每3分钟执行一次作业。 因为没有必要更改我的LIB或添加我决定使用的任何人 任务执行器的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"/>
由于不必要,我省略了作业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/