Мне нужна помощь от опытных программистов Spring Batch для решения конкретной проблемы.
Я новичок в Spring Batch.Он имеет подробную документацию для каждого класса или интерфейса, но практически ничего не работает во всех этих случаях.
Сценарий :
У меня есть база данных, размещенная в облаке, поэтому янеобходимо выполнить вызовы REST, чтобы получить из него некоторые данные и сохранить связанные с ним данные.
- При получении данных будет возвращен ответ JSON с данными, которые я запросил.
- При сохранении данных будет возвращен ответ JSON о количестве строки т. д.
- Все ответы будут иметь действительный код состояния HTTP.
- Транзакция завершается, когда вызов сохранения успешен с кодом Http, равным 200, и получены данные, показывающие, сколько записей было вставлено.
Соединение может быть не всегда доступным. В этом случае программа должна повторять попытки каждые 5 минут, пока вся задача не будет завершена.
То, что я решил не делать
Я мог бы сделать несколько грязных уловок Java (которые были удивительно рекомендованы многими при переполнении стека)
- Потоки и сон (слишком сырой)
- Spring's @Scheduled (Планировщик продолжает работать даже после завершения задания)
То, что я пробовал
Поэтому я решил использовать Spring Batch, так как он казался каркасомсделал для этого.
У меня нет файловых задач, поэтому я использовал Tasklet вместо Readers и Writers.
Интерфейс Tasklet может вернутьсятолько ЗАКОНЧЕННЫЙ код состояния.Нет кодов для FAILURE
Итак, внутри тасклета я установил пользовательское значение в StepContext и получил свое пользовательское значение в StepExecutionListener и соответственно настроил ExistStatus шага в FAILURE
Для обработки этого обходного пути мне пришлось настроить JobExecutionListener для соответствующего сбоя задания.
Помимо всех вышеперечисленных обходных путей,
- Пружинная партия не имеет расписания.Я должен в конечном итоге с помощью другого планировщика.
- Повторная попытка Spring Batch в шаге действительна только для ItemReader, ItemWriter и т. Д., Но не для тасклетов
Вопрос
Подходит ли Spring Batch для этой ситуации?
Правильно ли выполнен мой дизайн?Кажется, это очень "взломать".
Мне нужна помощь с наиболее эффективным способом справиться с моим сценарием