Ответ 1
Позвольте мне немного перефразировать ваш вопрос и посмотреть, справляется ли это с этим вопросом.
Что предлагает Spring Batch, что я должен был бы обрабатывать сам при создании пакетного приложения?
Spring Batch послужил основой для JSR-352 (спецификация java-партии), и поскольку эта спецификация вышла, в java-пространстве теперь доступно множество патчей Spring. Это, как говорится, все еще очень много, что Spring Batch обеспечивает вне рамки того, что делает базовая Java:
В рамках "базового" пакетного задания
В рамках простого пакетного задания Spring Batch предоставляет набор утилит и реализаций, которые были протестированы на сражениях во всех вертикалях предприятия. Вот некоторые примеры:
- Более 17
ItemReader
и 15ItemWriter
охватывающих широкие возможности ввода и вывода (File, JDBC, NoSQL, JMS и т.д.). Все они предоставляют декларативные параметры ввода-вывода, так что вам не нужно писать и проверять код для читателей и писателей с учетом состояния. - Коллекция реализаций
Tasklet
(Spring Batch, эквивалентнаяBatchlet
-Batchlet
JSR-352), в том числе для выполнения команд оболочки и взаимодействия с Hadoop. - Возможность останавливать/запускать/перезапускать задания и поддерживать состояние между исполнением.
- Возможность пропускать и повторять записи по мере их обработки.
- Управление транзакциями. Spring Batch обрабатывает транзакции для вас.
- Возможность уведомления других систем при возникновении ошибок посредством обмена сообщениями путем интеграции Spring Integration.
- Конфигурация на основе Java или XML.
- Все функции Spring, такие как DI, AOP, тестируемость и т.д.
- Независимость поставщика. Используя Spring Batch, вы можете использовать фреймворк, который с открытым исходным кодом и не привязан к какому-либо одному поставщику.
Дополнительные преимущества
Помимо приведенных выше примеров того, что Spring Batch приводит к таблице, она идет гораздо дальше:
- Возможности масштабирования - Spring Batch предоставляет ряд возможностей масштабирования, которые варьируются от одной JVM через потоки (многопоточный шаг, локальное разбиение на разделы и разбиения) до масштабируемости multi-JVM (удаленное разбиение на разделы и удаленное разбиение).
- Интеграция с интеграцией Spring - Spring Integration предоставляет ряд полезных элементов, которые позволяют создавать надежные пакетные приложения для обработки таких вещей, как сообщения об ошибках, каталоги для файлов для файлов, автоматически FTP файлы и т.д.
- Большая поддержка данных. Благодаря проекту Spring для Apache Hadoop существует ряд расширений к Spring Batch, которые позволяют ему хорошо работать с Hadoop. Вы можете запускать задания Spring Batch в YARN, вы можете выполнять задания Pig, Hive, MapReduce и т.д.
- Интеграция с Spring XD - Spring XD обеспечивает распределенное время выполнения для развертывания, управления и выполнения пакетных заданий.
Я лично рассматриваю пакетную обработку как модель программирования "set it and forget it". Хотя это не сексуально, пакетная обработка является очень полезной моделью обработки и более полезна в местах, чем большинство людей понимает. Spring Batch обеспечивает среду, которая позволяет как можно проще разрабатывать надежные пакетные задания.