SpringBatch调度程序执行多次

时间:2017-06-22 14:31:35

标签: java spring-batch scheduler

经过大量搜索,我没有遇到任何解决问题的方法。 我正在使用springjob.xml中的spring batch scheduler安排我的Jobs。

<bean id="startScheduler" class="com.myapp.MyServiceStart" />
<task:scheduler id="myScheduler" pool-size="1"/> 
 <task:scheduled-tasks  scheduler="myScheduler">
         <task:scheduled ref="startScheduler" method="runMyService" cron="*/5 * * * * *" /> 
</task:scheduled-tasks> 

但是runMyService会多次启动并随着每次重新运行而增加。我需要我的服务在每次预定的重新运行时运行一次。

1 个答案:

答案 0 :(得分:0)

可能是一个原因是再次执行后他们重新安排。所以下一个时间表取决于执行时间。

public ScheduledFuture<?> schedule() {
        synchronized (this.triggerContextMonitor) {
            this.scheduledExecutionTime = this.trigger.nextExecutionTime(this.triggerContext);
            if (this.scheduledExecutionTime == null) {
                return null;
            }
            long initialDelay = this.scheduledExecutionTime.getTime() - System.currentTimeMillis();
            this.currentFuture = this.executor.schedule(this, initialDelay, TimeUnit.MILLISECONDS);
            return this;
        }
    }
public void run() {
        Date actualExecutionTime = new Date();
        super.run();
        Date completionTime = new Date();
        synchronized (this.triggerContextMonitor) {
            this.triggerContext.update(this.scheduledExecutionTime, actualExecutionTime, completionTime);
            if (!this.currentFuture.isCancelled()) {
                schedule();
            }
        }
    }