Batch, Scheduler & Langläufer

Spring Batch, Jakarta Batch, CronJobs, Chunking, Restartability, Skip/Retry und fachliche Nachweise.

Version 2BetriebCodeDiagramm
Diagramm Batch, Scheduler & Langläufer
Fachlich-technische Darstellung zu Batch, Scheduler & Langläufer.

Batch ist produktionskritisch

Rechnungsläufe, Exporte, Importe, Mahnungen, Datenabgleiche und Reports laufen oft als Batch. Fehler dort sind nicht kleiner als Fehler in APIs.

Restartability planen

Ein Batch muss nach Fehler weiterlaufen können. Dafür braucht er Fortschrittsstatus, eindeutige Schlüssel, Checkpoints, Fehlerlisten und klare Wiederanlaufregeln.

Scheduler ist nur Auslöser

Die fachliche Logik gehört in Use Cases. Dann kann derselbe Prozess per Cron, manuell, Event oder API gestartet werden.

Entscheidungen

EntscheidungGute PraxisPrüffrage
Fachliche GrenzeZuerst Use Case, Invariante und Verantwortlichkeit klären.Welche Geschäftsentscheidung wird geschützt?
Technische GrenzeFramework-/Library-Code hinter Port, Adapter oder Konfiguration kapseln.Kann die Domain ohne Framework getestet werden?
BetriebTimeouts, Logs, Metriken, Traces, Security und Rollback definieren.Wie erkennt der Betrieb Fehler rechtzeitig?

Ausführliche Beispiele

Chunk Step
@Bean
Step invoiceExportStep(JobRepository jobs, PlatformTransactionManager tx) {
    return new StepBuilder("invoiceExport", jobs)
        .<Invoice, ExportLine>chunk(500, tx)
        .reader(invoiceReader())
        .processor(invoiceProcessor())
        .writer(exportWriter())
        .faultTolerant()
        .skip(InvalidInvoiceException.class)
        .skipLimit(100)
        .build();
}
Idempotenter Batch-Key
public record BatchItemKey(String jobName, String businessKey, LocalDate businessDate) {}

Typische Stolperfallen

StolperfalleWarum gefährlich
Keine WiederanlaufstrategieFehler führen zu manueller Datenbankkorrektur.
Zu große ChunksLocks und Rollbacks werden teuer.
Batch nicht beobachtbarNiemand kennt Fortschritt, Fehler und Restmenge.
⌂ Cockpit