2017-01-19 3 views
0

Ich habe ein Projekt mit Spring Batch vor ein paar Monaten gemacht.Verwenden von JobExecutionDecider mit Spring Boot Batch

Dieses Projekt funktioniert gut und ist eine Implementierung von JobExecutionDecider

public class BatchDecider implements JobExecutionDecider { 
private static final Logger log = LoggerFactory.getLogger(BatchDecider.class); 

@Autowired 
ConfigurationServiceWs config; 

public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { 

    if (codition) { 

     return new FlowExecutionStatus("AGAIN"); 
    } else { 

     return new FlowExecutionStatus("FINISH"); 
    } 
} 

Das hat funktioniert fini mit nur Spring Batch inklusive.

Jetzt muss ich es mit Spring Boot Batch verwenden. Der gesamte Prozess funktioniert bis zum Entscheidungsschritt. Wo ich den guten FlowExecutionStatus zurückgeben kann, aber ich weiß nicht warum, wird der Job mit einem "FAILED" Status abgeschlossen.

2017-01-19 17:11:35.347 DEBUG 23056 --- [nio-8081-exec-1] o.s.b.core.job.flow.support.SimpleFlow : Completed state=Global Job.decision0 with status=AGAIN 
2017-01-19 17:11:39.074 DEBUG 23056 --- [nio-8081-exec-1] o.s.b.core.job.flow.support.SimpleFlow : Handling state=Global Job.FAILED 
2017-01-19 17:11:41.002 DEBUG 23056 --- [nio-8081-exec-1] o.s.b.core.job.flow.support.SimpleFlow : Completed state=Global Job.FAILED with status=FAILED 
2017-01-19 17:11:43.170 DEBUG 23056 --- [nio-8081-exec-1] o.s.batch.core.job.AbstractJob   : Job execution complete: JobExecution: id=0, version=1, startTime=Thu Jan 19 17:11:12 CET 2017, endTime=null, lastUpdated=Thu Jan 19 17:11:12 CET 2017, status=FAILED, exitStatus=exitCode=FAILED;exitDescription=, job=[JobInstance: id=0, version=0, Job=[Global Job]], jobParameters=[{time=1484842272108}] 

Jemand hat eine Idee, warum nicht funktioniert?

Danke!

+0

Sind Sie sicher, Code ausgeführt als 'Bedingung' funktioniert einwandfrei ohne Fehler? –

+0

Ja, wie Sie in der ersten Protokollzeile sehen können, lautet der Status "status = AGAIN". Und im Debug-Modus gebe ich die Bedingung weiter. In der SilpmeFlow-Klasse von Spring-Batch kann ich die Entwicklung des Zustands sehen, und der FEHLER erscheint nach dem Status COMPLETED des Entscheiders. –

Antwort

1

Ich fand eine Lösung.

Ich benutze den Entscheider, um eine Schleife auf meinem Job zu machen.

ich dies mit:

@Bean(name = "myJob") 
public Job importUserJob() { 
    return jobBuilderFactory.get("Global Job") 
      .incrementer(new RunIdIncrementer()) 
      .flow(getListeDocMiseADispo()) 
      .next(decider).on("FINISH").end() 

      .next(boucle()) 
      .next(decider).on("AGAIN").to(boucle()) 

      .end() 
      .build(); 
} 

Und Arbeit mit diesem:

@Bean(name = "myJob") 
public Job importUserJob() { 
    return jobBuilderFactory.get("Global Job") 
      .incrementer(new RunIdIncrementer()) 
      .flow(getListeDocMiseADispo()) 
      .next(decider).on("AGAIN").to(boucle()) 
      .next(decider).on("FINISH").end() 

      .next(boucle()) 
      .next(decider).on("AGAIN").to(boucle()) 

      .end() 
      .build(); 
} 

Aber ich weiß nicht, warum. Vielleicht Spring-Boot-Batch-Starter meine Batch-Version zu aktualisieren und das zu brechen?

jemand weiß etwas.

Verwandte Themen