← Назад к вопросам

Что такое Spring Batch?

2.0 Middle🔥 171 комментариев
#Spring Framework

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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-приложений, требующих надёжной и эффективной пакетной обработки данных.