2017-06-22 6 views
0

Ich habe keine Lösung für mein Problem nach einer Menge Suche gefunden. Ich plane meine Jobs mit Spring Batch Scheduler in springjob.xml.SpringBatch Scheduler mehrere Male ausgeführt

<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> 

Aber runMyService startet mehrmals und nimmt mit jedem erneuten Durchlauf zu. Ich brauche meinen Dienst, um nur einmal mit jedem geplanten erneuten Durchlauf zu laufen.

+0

Der 'cron' Ausdruck sieht ungültig aus. Was ist das erwartete Ausführungsintervall? –

+0

Sieht so aus als hättest du einen zu viel *. Probieren Sie '*/5 * * * *' – yogidilip

Antwort

0

Vielleicht ein Grund ist, dass nach der Ausführung wieder sie planen. So hängt der nächste Zeitplan von der Ausführungszeit.

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(); 
      } 
     } 
    }