В пакетном процессоре Spring дождитесь завершения обработки всех данных одним процессом, затем выполните следующий процесс

#spring-batch

#spring-batch

Вопрос:

В процессе использования Spring batch у меня есть требование прочитать файл Excel, заполнить статистику одного из столбцов, а затем использовать значение одного из столбцов, разделенное на статистический результат.Примеры следующие

 input:
name price
a 10
b 20
c 30

ouput:
name price proportion
a 10 1/6
b 20 1/3
c 30 1/2
  

Ответ №1:

Я могу предложить вам выполнить два шага :

  1. Первый (tasklet), который вычисляет сумму всех цен и регистрирует результат в JobExecutionContext
  2. И второй (фрагмент), чтобы перечитать файл и записать столбец пропорций с суммой, вычисленной на первом шаге.

Комментарии:

1. Неужели нет другого лучшего решения, чем то, которое вы предложили? Первое, о чем я думаю, это использовать решение, которое вы сказали, но я думаю, что это решение не является оптимальным решением. Поскольку для каждого шага требуются необработанные данные, прочитайте файл дважды или кэшируйте данные на первом шаге. Я хочу использовать CompositeItemProcessor для обработки всех данных на первом процессоре, а затем на следующем процессоре, чтобы мне не приходилось дважды читать файл или кэшировать данные. Но я знаю, что CompositeItemProcessor не такой. Каждый раз обработка данных проходит через все процессоры.