Весенняя партия |
Узнайте о Spring Batch из этой статьи Рене Энрикеса, технического руководителя многонациональной компании со штаб-квартирой в Силиконовой долине, и Альберто Салазара, предпринимателя и страстного консультанта по Java.
Вы можете найти исходный код этой статьи здесь.
Весенняя партия представляет собой полную основу для создания надежного пакетного приложения. Вы можете создавать многократно используемые функции для обработки больших объемов данных или задач, обычно называемой массовой обработкой.
Spring Batch предоставляет множество полезных функций, таких как следующие:
• Регистрация и отслеживание
• Управление транзакциями
• Статистика работы
• Управление процессом; например, путем перезапуска заданий, пропуска шагов и управления ресурсами
• Веб-консоль администрирования
Эта платформа предназначена для управления большими объемами данных и достижения высокопроизводительных пакетных процессов с использованием функций секционирования. В этой статье будет рассмотрен простой проект, объясняющий каждый основной компонент Spring Batch.
Как упоминалось в Пакетная документация Springнаиболее распространенные сценарии использования фреймворка следующие:
• Периодическое выполнение пакетных процессов
• Параллельная пакетная обработка для параллельной обработки задания
• Поэтапная обработка корпоративных сообщений
• Крупная параллельная пакетная обработка
• Ручной или запланированный перезапуск после сбоев
• Последовательная обработка зависимых шагов (с расширениями для пакетов, управляемых рабочим процессом)
• Частичная обработка: пропуск записей (например, при откате)
• Транзакция всего пакета: для случаев с небольшим размером пакета или существующими хранимыми процедурами/скриптами.
В корпоративных приложениях очень распространена необходимость обработки миллионов записей (данных) или чтения из источника. Этот источник может содержать большие файлы с несколькими записями (например, файлы CSV или TXT) или таблицы базы данных. К каждой из этих записей обычно применяют некоторую бизнес-логику, выполняют проверки или преобразования и завершают задачу, записывая результат в другой формат вывода (например, в базу данных или файл).
Spring Batch предоставляет полную структуру для реализации такого рода требований, сводя к минимуму взаимодействие с человеком.
Вы ознакомитесь с основными понятиями пакета Spring:
• Задание инкапсулирует пакетный процесс и должно состоять из одного или нескольких шагов. Каждый шаг может выполняться последовательно, параллельно или быть разделенным.
• Шаг — это последовательный этап задания.
• JobLauncher отвечает за запуск задания JobExecution.
• JobRepository — это репозиторий метаданных JobExecution.
Создайте простой пример задания с помощью Spring Batch, чтобы понять, как оно работает. Сначала создайте простой проект Java и включите в него зависимость spring-batch. Для этого создайте приложение Spring Boot, используя его инициализатор (как показано на следующем снимке экрана:
Добавьте зависимость для Spring Batch. Вы можете сделать это, введя Spring Batch в строку поиска в поле зависимостей и нажав Enter. В выбранном разделе зависимостей появится зеленое поле со словом «Пакетная обработка». Когда это будет сделано, нажмите кнопку «Создать проект».
Структура проекта будет следующей:
Если вы посмотрите на раздел зависимостей, который был добавлен инициализатором, вы увидите стартер spring-batch в файле pom.xml следующим образом:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-test</artifactId>
<scope>test</scope>
</dependency>
Если вы не используете Spring Boot, вы можете явно добавить spring-batch-core в качестве зависимости проекта. Ниже показано, как это выглядит с использованием Maven:
Проекту потребуется источник данных; если вы попытаетесь запустить приложение без него, вы получите сообщение об ошибке в консоли:
Чтобы устранить эту проблему, добавьте зависимость как часть файла pom.xml для настройки встроенного источника данных. В целях тестирования используйте HSQL (
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
Теперь вам нужно добавить в приложение аннотации @EnabledBatchProcessing и @Configuration:
@SpringBootApplication
@EnableBatchProcessing
@Configuration
public class SimpleBatchApplication {
Затем настройте свое первое задание, используя класс JobBuildFactory с одним процессом задачи на основе Spring Batch, используя класс StepBuilderFactory:
@Autowired
privateJobBuilderFactoryjobBuilderFactory;
@Autowired
privateStepBuilderFactorystepBuilderFactory;
Затем метод Job покажет, что он запускается:
@Bean
public Job job(Step ourBatchStep) throws Exception {
returnjobBuilderFactory.get("jobPackPub1")
.incrementer(new RunIdIncrementer())
.start(ourBatchStep)
.build();
}
После создания задания добавьте в него новую задачу (шаг):
@Bean
public Step ourBatchStep() {
returnstepBuilderFactory.get("stepPackPub1")
.tasklet(new Tasklet() {
publicRepeatStatus execute(StepContribution contribution,
ChunkContextchunkContext) {
return null;
}
})
.build();
}
Следующий код показывает, как выглядит класс приложения:
@EnableBatchProcessing
@SpringBootApplication
@Configuration
public class SimpleBatchApplication {
public static void main(String[] args) {
SpringApplication.run(SimpleBatchApplication.class, args);
}
@Autowired
privateJobBuilderFactoryjobBuilderFactory;
@Autowired
privateStepBuilderFactorystepBuilderFactory;
@Bean
public Step ourBatchStep() {
returnstepBuilderFactory.get("stepPackPub1")
.tasklet(new Tasklet() {
publicRepeatStatus execute
(StepContribution contribution,
ChunkContextchunkContext) {
return null;
}
})
.build();
}
@Bean
public Job job(Step ourBatchStep) throws Exception {
returnjobBuilderFactory.get("jobPackPub1")
.incrementer(new RunIdIncrementer())
.start(ourBatchStep)
.build();
}
}
Для того, чтобы убедиться, что все в порядке, запустите приложение. Для этого выполните в командной строке следующее:
$ mvnspring-boot:run
Кроме того, вы можете создать приложение, запустив Maven:
$ mvn install
Затем запустите недавно созданную банку в терминале:
$ java -jar target/simple-batch-0.0.1-SNAPSHOT.jar
Наконец, вы увидите следующий вывод в консоли:
Обратите внимание на вывод консоли. Для этого запустите задание с именем jobPackPub1 и выполните bean-компонент как stepPackPub1. Теперь более подробно рассмотрим компоненты, лежащие в основе следующих шагов:
• ItemReader представляет получение входных данных для шага.
• ItemProcessor представляет бизнес-обработку элемента.
• ItemWriter представляет результат шага
Следующая диаграмма показывает общую картину основных элементов Spring Batch:
Теперь вы можете завершить свой пример, используя ItemReader, ItemProcessor и ItemWriter. Используя и объясняя эти компоненты, архитектуры Pipe-and-Filter могут быть реализованы с использованием Spring Batch.
Если вы нашли эту статью интересной, вы можете изучить Архитектура программного обеспечения с Spring 5.0 для понимания наиболее распространенных архитектурных моделей и того, когда и где их можно использовать. Архитектура программного обеспечения с Spring 5.0 подробно объясняет, как выбрать правильную архитектуру и применить лучшие практики в процессе разработки программного обеспечения, чтобы избежать технического долга и удовлетворить все бизнес-требования.