Spring Batch : enregistrer des données dans l’Execution Context d’un Step

Baptiste Autin, le 3 avril 2012

Dans la méthode execute() d’une Tasklet, si vous voulez enregistrer des données dans l’ExecutionContext du Step courant, n’allez pas trop vite.
N’écrivez pas :

chunkContext.getStepContext().getStepExecutionContext().put("myKey", "myValue");

Écrivez plutôt :

chunkContext.getStepContext().getStepExecution().getExecutionContext().put("mode", "test");

En effet, dans le premier cas, getStepExecutionContext() retourne une collection non modifiable. Vous êtes donc bon pour une java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableMap.put(Collections.java:1285)
si vous tentez de modifier le contenu qu’elle renvoie.



Remarque : avec un ItemWriter, on ne peut pas se tromper, puisqu’il faut ajouter explicitement un écouteur à sa classe avec l’annotation @BeforeStep :

private StepExecution stepExecution;

@BeforeStep
public void saveStepExecution(StepExecution stepExecution) {
    this.stepExecution = stepExecution;
}

(...)

this.stepExecution.getExecutionContext().put("someKey", "myValue");

Laisser une réponse

«     »