Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Spring Batch
Spring Batch — это фреймворк для обработки больших объёмов данных в пакетном режиме (batch processing). Он предоставляет готовые решения для чтения, обработки и записи данных, идеально подходит для ETL-операций, импорта/экспорта, миграций данных и других задач, требующих массовой обработки.
Основные компоненты
Job — это основной контейнер, содержащий всю логику пакетной обработки. Job состоит из одного или нескольких Step'ов и управляет их жизненным циклом.
Step — это независимый этап обработки данных с тремя основными операциями: чтение (read), обработка (process) и запись (write).
ItemReader — компонент для чтения данных из источника (база, файл, API).
ItemProcessor — трансформирует данные в нужный формат.
ItemWriter — записывает обработанные данные в целевой источник.
JobLauncher — запускает Job с заданными параметрами.
JobRepository — сохраняет метаданные о выполнении Job (статус, прогресс, ошибки).
Простой пример
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Bean
public ItemReader<String> fileItemReader() {
FlatFileItemReader<String> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("input.csv"));
reader.setLineMapper(new PassThroughLineMapper());
return reader;
}
@Bean
public ItemProcessor<String, String> itemProcessor() {
return item -> item.toUpperCase();
}
@Bean
public ItemWriter<String> fileItemWriter() {
FlatFileItemWriter<String> writer = new FlatFileItemWriter<>();
writer.setResource(new FileSystemResource("output.csv"));
writer.setLineAggregator(new PassThroughLineAggregator<>());
return writer;
}
@Bean
public Step processStep(
ItemReader<String> reader,
ItemProcessor<String, String> processor,
ItemWriter<String> writer,
StepBuilderFactory stepBuilder) {
return stepBuilder.get("processStep")
.<String, String>chunk(100)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
@Bean
public Job processJob(
Step processStep,
JobBuilderFactory jobBuilder) {
return jobBuilder.get("processJob")
.start(processStep)
.build();
}
}
Ключевые особенности
Chunk-oriented processing — данные обрабатываются порциями (chunks). После обработки каждого chunk'а происходит транзакция, позволяя избежать потери данных при сбое.
Fault tolerance — встроенная поддержка обработки ошибок с возможностью пропуска или переподсчёта элементов.
Масштабируемость — Spring Batch поддерживает параллельную обработку Step'ов и распределённую обработку через Spring Cloud Task.
Мониторинг — подробное логирование и отслеживание статуса Job через JobRepository.
Типичные случаи использования
- Импорт/экспорт больших объёмов данных из CSV, XML, JSON
- ETL-операции между различными системами
- Миграция данных между версиями БД
- Генерация отчётов на основе данных
- Периодическая очистка или архивирование данных
Spring Batch — мощный инструмент для enterprise-приложений, требующих надёжной и эффективной пакетной обработки данных.