76 votes

Comment accéder aux paramètres du travail depuis ItemReader, dans Spring Batch ?

Cela fait partie de mon job.xml :

 <job id="foo" job-repository="job-repository">
  <step id="bar">
    <tasklet transaction-manager="transaction-manager">
      <chunk commit-interval="1"
        reader="foo-reader" writer="foo-writer"
      />
    </tasklet>
  </step>
</job>

Voici le lecteur d'articles :

 import org.springframework.batch.item.ItemReader;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("foo-reader")
public final class MyReader implements ItemReader<MyData> {
  @Override
  public MyData read() throws Exception {
    //...
  }
  @Value("#{jobParameters['fileName']}")
  public void setFileName(final String name) {
    //...
  }
}

Voici ce que Spring Batch dit au moment de l'exécution :

 Field or property 'jobParameters' cannot be found on object of 
type 'org.springframework.beans.factory.config.BeanExpressionContext'

Qu'est-ce qui ne va pas ici ? Où puis-je en savoir plus sur ces mécanismes dans Spring 3.0 ?

20voto

Alex Pruss Points 360

Assez tard, mais vous pouvez également le faire en annotant une méthode @BeforeStep :

 @BeforeStep
    public void beforeStep(final StepExecution stepExecution) {
        JobParameters parameters = stepExecution.getJobExecution().getJobParameters();
        //use your parameters
}

3voto

dmotta Points 563

En complément d'un exemple supplémentaire, vous pouvez accéder à tous les paramètres de tâche dans la classe JavaConfig :

 @Bean
@StepScope
public ItemStreamReader<GenericMessage> reader(@Value("#{jobParameters}") Map<String,Object> jobParameters){
          ....
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X