2017-06-22 1 views
0

Je n'ai pas trouvé de solution à mon problème après beaucoup de recherches. Je planifie mes travaux avec Spring Scheduler dans springjob.xml.Planificateur SpringBatch s'exécutant plusieurs fois

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

Mais runMyService démarre plusieurs fois et augmente à chaque nouvelle exécution wchduled. J'ai besoin de mon service pour exécuter une seule fois avec chaque réexécution prévue.

+0

L'expression 'cron' semble invalide. Quel est l'intervalle d'exécution attendu? –

+0

On dirait que vous en avez un de trop *. Essayez '*/5 * * * *' – yogidilip

Répondre

0

Peut-être une raison est que, après l'exécution de nouveau, ils replanifier. Ainsi, la prochaine planification dépend de l'heure d'exécution.

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