Spring Batch für robuste Massenverarbeitung
Spring Batch ist ein Framework für Batchjobs mit Job/Step-Modell, Reader, Processor, Writer, Restartability, Skip/Retry und Partitionierung.
Fachliche Einordnung
Enterprise-Systeme haben weiterhin Nachtläufe, Abrechnungen, Imports, Exports und Massenkorrekturen. Batch muss wiederanlaufbar, auditierbar und performant sein.
Enterprise-Merksatz: Spring Batch ist ein Framework für Batchjobs mit Job/Step-Modell, Reader, Processor, Writer, Restartability, Skip/Retry und Partitionierung.
Technische Darstellung
Kernkonzepte
- Job, Step und JobRepository.
- ItemReader, ItemProcessor, ItemWriter.
- Chunk-orientierte Verarbeitung.
- Skip, Retry und Restart.
- Partitioning und Remote Chunking für Skalierung.
Wann einsetzen?
- Du verarbeitest große Datenmengen planbar.
- Du migrierst Quartz/EJB Timer/Control-M Jobs.
- Du brauchst Restart nach Fehlern und klare Job-Metadaten.
Typische Fehler und Risiken
- Batchjob ohne stabile Identifikation verarbeiteter Daten.
- Keine Restart-Strategie.
- Fachlogik nur im Writer verstecken.
Legacy- und Modernisierungssicht
Scheduler- und Batch-EJBs werden in Jobs und Steps mit klaren Reader/Processor/Writer-Grenzen überführt.
Ausführliches Beispiel
Das Beispiel zeigt bewusst nicht nur Annotationen, sondern auch die Verantwortung der Schicht. In echten Projekten sollte der technische Spring-Code an Adapter- oder Konfigurationsrändern bleiben, während die Fachlogik testbar und möglichst frameworkarm bleibt.
@Configuration
class SettlementBatchConfiguration {
@Bean
Step settlementStep(JobRepository jobRepository, PlatformTransactionManager tx,
ItemReader<Payment> reader, ItemProcessor<Payment, Settlement> processor,
ItemWriter<Settlement> writer) {
return new StepBuilder("settlementStep", jobRepository)
.<Payment, Settlement>chunk(500, tx)
.reader(reader)
.processor(processor)
.writer(writer)
.faultTolerant()
.skip(InvalidPaymentException.class).skipLimit(100)
.build();
}
}
Checkliste für Reviews
- Ist die Verantwortung des Bausteins klar: Framework steuert Lebenszyklus, Library wird gezielt benutzt?
- Ist die Fachlogik außerhalb von Controller, Listener, Repository-Implementierung oder Konfiguration?
- Sind Fehlerfälle, Timeouts, Security, Monitoring und Tests sichtbar modelliert?
- Gibt es klare Grenzen zwischen DTO, Domäne, Persistence und Infrastruktur?