Ya no necesitas buscar más en otras páginas ya que has llegado al lugar indicado, contamos con la solución que deseas y sin liarte.
Solución:
1) Ponga una anotación de alcance en su procesador de datos, es decir
@Scope(value = "step")
2) Cree una instancia de clase en su procesador de datos e inyecte el valor del parámetro de trabajo mediante la anotación de valor:
@Value("#jobParameters['fileName']")
private String fileName;
Su clase final de procesador de datos se verá así:
@Scope(value = "step")
public class DataItemProcessor implements ItemProcessor
@Value("#jobParameters['fileName']")
private String fileName;
public OutPutData process(final InputData inputData) throws Exception
// i want to get job Parameters here ????
System.out.println("Job parameter:"+fileName);
public void setFileName(String fileName)
this.fileName = fileName;
En caso de que su procesador de datos no esté inicializado como un bean, coloque una anotación @Component en él:
@Component("dataItemProcessor")
@Scope(value = "step")
public class DataItemProcessor implements ItemProcessor {
Una mejor solución (en mi opinión) que evita el uso del lenguaje de expresión hacky (SpEL) de Spring es autoconectar el StepExecution
contexto en su procesador usando @BeforeStep
.
En su procesador, agregue algo como:
@BeforeStep
public void beforeStep(final StepExecution stepExecution)
JobParameters jobParameters = stepExecution.getJobParameters();
// Do stuff with job parameters, e.g. set class-scoped variables, etc.
los @BeforeStep
anotación
Marca un método para ser llamado antes de un
Step
se ejecuta, que viene después de unStepExecution
se crea y persiste, pero antes de que se lea el primer elemento.