Saltar al contenido

Cómo obtener los parámetros del trabajo en el procesador de elementos mediante la anotación Spring Batch

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 un StepExecution se crea y persiste, pero antes de que se lea el primer elemento.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *