Я реализую задание, которое загрузит данные из базы данных и запишет результат в файлы xml. Файлы xml будут иметь заголовок, основанный на некоторых атрибутах, которые хранятся в контексте выполнения ....

1
Christoph 2 Мар 2021 в 14:30

1 ответ

Лучший ответ

Если вы хотите, чтобы метод beforeStep вызывался перед шагом в вашем CustomXMLHeaderCallback, вам необходимо зарегистрировать этот компонент в качестве слушателя на вашем шаге с помощью одного из методов listener конструктора шагов. Это объясняется в документации здесь: Прерывание выполнения шага.

В противном случае вы можете ввести выполнение шага с помощью @Value:

@Value("#{StepExecution}")
private StepExecution stepExecution;

Третий вариант - вставить требуемый атрибут из контекста выполнения шага:

// define your header as follows:
public class CustomXMLHeaderCallback implements StaxWriterCallback {

   private String currentFile;

   public CustomXMLHeaderCallback(String currentFile) {
      this.currentFile = currentFile;
   }

   @Override
   public void write(XMLEventWriter writer) throws IOException {
      // use this.currentFile as needed here
   }
   

}

// decalre your bean as follows:
@Bean
@StepScope
public CustomXMLHeaderCallback headerCallback(@Value("#{stepExecutionContext['currentFile']}") String currentFile) {
    return new CustomXMLHeaderCallback(currentFile);
}

Я рекомендую третий вариант, поскольку он вводит только обязательный атрибут, а не весь объект выполнения шага.

1
Mahmoud Ben Hassine 2 Мар 2021 в 12:11