Как использовать Spring Batch для подключения к серверу? - PullRequest
0 голосов
/ 10 сентября 2018

Мне нужна помощь от опытных программистов Spring Batch для решения конкретной проблемы.

Я новичок в Spring Batch.Он имеет подробную документацию для каждого класса или интерфейса, но практически ничего не работает во всех этих случаях.

Сценарий :
У меня есть база данных, размещенная в облаке, поэтому янеобходимо выполнить вызовы REST, чтобы получить из него некоторые данные и сохранить связанные с ним данные.
- При получении данных будет возвращен ответ JSON с данными, которые я запросил.
- При сохранении данных будет возвращен ответ JSON о количестве строки т. д.
- Все ответы будут иметь действительный код состояния HTTP.
- Транзакция завершается, когда вызов сохранения успешен с кодом Http, равным 200, и получены данные, показывающие, сколько записей было вставлено.

Соединение может быть не всегда доступным. В этом случае программа должна повторять попытки каждые 5 минут, пока вся задача не будет завершена.

То, что я решил не делать
Я мог бы сделать несколько грязных уловок Java (которые были удивительно рекомендованы многими при переполнении стека)

  1. Потоки и сон (слишком сырой)
  2. Spring's @Scheduled (Планировщик продолжает работать даже после завершения задания)

То, что я пробовал
Поэтому я решил использовать Spring Batch, так как он казался каркасомсделал для этого.

  1. У меня нет файловых задач, поэтому я использовал Tasklet вместо Readers и Writers.

  2. Интерфейс Tasklet может вернутьсятолько ЗАКОНЧЕННЫЙ код состояния.Нет кодов для FAILURE

  3. Итак, внутри тасклета я установил пользовательское значение в StepContext и получил свое пользовательское значение в StepExecutionListener и соответственно настроил ExistStatus шага в FAILURE

  4. Для обработки этого обходного пути мне пришлось настроить JobExecutionListener для соответствующего сбоя задания.

Помимо всех вышеперечисленных обходных путей,

  1. Пружинная партия не имеет расписания.Я должен в конечном итоге с помощью другого планировщика.
  2. Повторная попытка Spring Batch в шаге действительна только для ItemReader, ItemWriter и т. Д., Но не для тасклетов

Вопрос

  1. Подходит ли Spring Batch для этой ситуации?

  2. Правильно ли выполнен мой дизайн?Кажется, это очень "взломать".

Мне нужна помощь с наиболее эффективным способом справиться с моим сценарием

1 Ответ

0 голосов
/ 11 сентября 2018

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

Что принесла мне Весенняя партия:

  • исполнение двигателя / модели для больших зависимых операций. Другими словами, я мог сохранить свой ввод как одну единственную точку входа и иметь «огромную» транзакцию поверх других мелких операций.
  • Возможность видеть результаты выполнения и отслеживать их.
  • Повторяемость пакетных операций. Это одна из лучших вещей в весенней партии
  • это позволяет вам спроектировать вашу работу таким образом, что если что-то пойдет не так во время выполнения, вы можете просто перезапустить ее и продолжить работу с точки сбоя. Но вам нужно приложить некоторые усилия, чтобы сохранить это.

Подробнее о бизнес-кейсах здесь: https://docs.spring.io/spring-batch/trunk/reference/html/spring-batch-intro.html#springBatchUsageScenarios

Так что вам нужно тщательно проверить эти бизнес-кейсы и ответить себе, если они вам действительно нужны. Пока что вы описали - я действительно не вижу пользы от весенней партии для вас.

...