1

Я использую Spring для загрузки большого файла для его обработки. сценарий не очень прост:Лучший подход с использованием Spring для обработки большого файла

1. Download the file via http 
2. process it(validations,transformations) 
3. send it into queue 
  • нет необходимости сохранять данные входного файла.
  • мы могли бы иметь несколько экземпляров задания (одного и тот же сценарий) работает в то же время

Я ищу лучшую практику справиться с этой ситуацией.

Должен ли я создать Tasklet для загрузки файла локально, а затем начать его обработку с помощью обычных шагов?
в этом случае мне нужно рассмотреть некоторые ТЕМП-файловые проблемы (убедитесь, что я удалить его, убедитесь, что я не перекрывая другие временного файла, и т.д ..)

В другой стороны, я мог бы загрузить и сохранить это в памяти, но я боюсь, что, если я запустил много экземпляров, то очень скоро выйдет из памяти.

Как бы вы предложили прибить этот сценарий ?? Должен ли я использовать тасклет вообще?

спасибо.

ответ

3

Если у вас есть большой файл, я бы рекомендовал хранить его на диск, если не будет хорошая причина не делать. Сохраняя файл на диск, вы можете перезапустить задание без необходимости повторной загрузки файла, если возникла ошибка.

Что касается Tasklet vs Spring Integration, мы обычно рекомендуем Spring Integration для этого типа функциональности, так как там уже доступны функции FTP. При этом Spring XD использует функцию Tasklet для работы с FTP, поэтому это не редкость и для этого.

Хорошее видео, посвященное интеграции Spring Batch и Spring Integration - это разговор Гуннара Хиллерта, который я дал в SpringOne2GX. Вы можете найти здесь весь видеоролик: https://www.youtube.com/watch?v=8tiqeV07XlI. Раздел, в котором рассказывается об использовании Spring Batch Integration for FTP перед Spring Batch, примерно в 29:37.

+0

Я смотрел это видео. Дело в том, что они опросили действующий реж. Мне все еще нужно написать задачу, которая загружает файл (а не из ftp) и помещает его куда-нибудь. Также мне нужно управлять всем (удалять этот временный файл и избегать дублирования), как вы думаете, я должен делать это через tasklet или? – rayman

+0

Загрузка файла через HTTP на самом деле не отличается от загрузки через FTP в Spring Integration. Просто измените адаптер. –

+0

Вы говорите о http входящем адаптере? Я искал практический пример. mybe, вы могли бы сослаться на меня? Спасибо. – rayman

1

Я считаю, что ниже пример является классическим решением вашей проблемы http://docs.spring.io/spring-batch/trunk/reference/html/springBatchIntegration.html#launching-batch-jobs-through-messages

+0

Я понимаю, что я не могу использовать Spring-интеграцию для запуска моей работы с помощью триггера файла. но я спрашивал что-то еще. как бы вы справились с этим файлом? вы действительно загрузили бы его и обработали бы его в памяти или? – rayman

Смежные вопросы