经过大量搜索,我没有遇到任何解决问题的方法。 我正在使用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会多次启动并随着每次重新运行而增加。我需要我的服务在每次预定的重新运行时运行一次。
答案 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();
}
}
}