Upload
lena-lindstrot
View
74
Download
0
Embed Size (px)
Citation preview
Batchverarbeitung
● Verarbeitung von großen Datenmengen ohne
Benutzerinteraktivität.
● Gleiche Schritte werden auf die gleiche Art von
Daten regelmäßig ausgeführt
● Herausforderungen: große Datenmenge,
Automatisch, Robustheit, Zuverlässigkeit und
Performance, Transaktionen
Beispiele für Batchverarbeitung
● Verarbeitung von Abrechnungen
● Erstellung von Statistiken
● Kommunikation von verschiedenen
Programmen/Systemen
● Allgemein:
– Große Datenmengen einlesen, verarbeiten, in ein anderes
Format exportieren (XML, CSV, Datenbank)
Kurz zu Spring Framework
● Open Source Framework
● AOP
● Convention over configuration
● Dependeny Injection
● Viele Erweiterung (Integration, Boot und Batch)
Vorteile Spring Batch
● Hilft den Code zu strukturieren
● Chunk orientierte Verarbeitung (Streaming, parallele
Verarbeitung)
● Viele Out-of-the-box Komponenten
● Transaktionsmanagement
● Hilft bei der Fehlerbehandlung (Überspringen von
fehlerhaften Datensätzen; Retry-Logik; Transaktion
zurück rollen?)
● Automatisches Logging in die Datenbank
● Infrastruktur für Start/Stop/Retry
Neustart eines Jobs
● Job + Parameter = JobInstance
– Kann solange gestartet werden bis er einmal fehlerfrei
durchgelaufen ist (JobExecution)
● Fehler korrigieren und neu starten mit gleichen
Parametern
● Probleme: Reihenfolge des Einlesens (z. B. SQL:
ohne „order by“)
Transaktion und JDBCReader
● Alle Datensätze auf einmal einlesen
– zu viele Daten im Cache
● Konstant einlesen
– Commit am Ende des Cunks schließt diese Verbindung
● Außerhalb der Transaktion: Für den Reader eine
eigene Transaktion starten
Probleme bei Skip
● Der aktuelle Chunk wird in den Cache geladen und
gleichzeitig die Transaktion zurückgerollt
– Queue: Items werden zurück in die Queue gerollt und die
gleichen Items in dem Cache geladen
● Doppelte Verarbeitung!
Quellen
● Spring Batch in Action (2011) Manning
● http://docs.spring.io/spring-batch/reference/html
● https://www.mkyong.com/spring-batch/spring-batch-hello-world-example
● http://blog.aajtech.com/blog/how-to-use-spring-batch-with-maven-junit-h2-2/
● https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-1-the-
basics/
● https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-2-restart-
cursor-based-reading-and-listeners/
● https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-3-skip-and-
retry/
● … und natürlich Wikipedia :)