J'ai reçu une tâche pour appeler le travail par lots un par un. Chaque travail dépend d'un autre. Le premier résultat du travail doit exécuter le programme de travail qui en découle. Je cherchais comment transmettre les données après l'exécution du travail. J'ai trouvé que cette ExecutionContextPromotionListener est pratique.
1) J'ai ajouté un haricot pour "ExecutionContextPromotionListener" comme ci-dessous
@Bean
public ExecutionContextPromotionListener promotionListener()
{
ExecutionContextPromotionListener listener = new ExecutionContextPromotionListener();
listener.setKeys(new String[] { "entityRef" });
return listener;
}
2) Ensuite, j'attaché un de l'auditeur à mes pas
Step step = builder.faultTolerant()
.skipPolicy(policy)
.listener(writer)
.listener(promotionListener())
.listener(skiplistener)
.stream(skiplistener)
.build();
3) J'ai ajouté stepExecution comme une référence dans mon implémentation d'étape Writer et peuplée dans le Beforestep
@BeforeStep
public void saveStepExecution(StepExecution stepExecution)
{
this.stepExecution = stepExecution;
}
4) dans la fin de mon étape écrivain, je peuplé les valeurs du stepexecution comme les touches comme ci-dessous
lStepContext.put("entityRef", lMap);
5) Après l'exécution du travail, je récupérai les valeurs de la lExecution.getExecutionContext()
et peuplé comme réponse d'emploi. 6) à partir de l'objet de réponse de travail, j'obtiendrai les valeurs et remplirai les valeurs requises dans le reste des travaux.
Le code ci-dessus permet de promouvoir les données des étapes vers ExecutionContext à l'aide de ExecutionContextPromotionListener. Il peut être fait pour toutes les étapes.
Ceci est confirmé par la documentation + exemple ici: http://docs.spring.io/spring-batch/trunk/reference/html/patterns.html#passingDataToFutureSteps –
Merde, cinq ans plus tard et cette question a encore de la traction. Way to go Spring Batch :) – WineSoaked