Spring Batch : Tasklet mit multi-threaded Testamentsvollstrecker hat sehr schlechte Leistungen im Zusammenhang Drosselung Algorithmus

Mit Spring batch 2.2.1 habe ich konfiguriert und Spring Batch Job, ich habe diesen Ansatz:

Konfiguration ist folgende:

  • Tasklet verwendet ThreadPoolTaskExecutor begrenzt auf 15 threads

  • Drossel-limit ist gleich der Anzahl der threads

  • Chunk verwendet wird, mit:

    • 1 synchronisiert adapter von JdbcCursorItemReader, um es zu ermöglichen die Nutzung von vielen threads als pro Spring Batch Dokumentation Empfehlung

      Können Sie Sie synchronisieren Aufruf von read() und so lange, wie die Verarbeitung und das schreiben ist der teuerste Teil der chunk Ihrem Schritt können noch abgeschlossen viel schneller als in einem single-threaded-Konfiguration.

    • saveState ist falsch auf JdbcCursorItemReader

    • Einer Benutzerdefinierten ItemWriter basierend auf JPA. Beachten Sie, dass die Verarbeitung eines Elements kann variieren in Bezug auf die Bearbeitungszeit, es kann paar millis zu wenigen Sekunden ( > 60).

    • commit-interval auf 1 gesetzt (ich weiß, es könnte besser sein, aber es ist nicht das Problem)

  • Alle jdbc-pools sind in Ordnung, in Bezug auf Spring Batch doc Empfehlung

Ausführen der batch führt zu sehr seltsamen und schlechten Ergebnissen aufgrund der folgenden:

  • an irgendeinem Schritt wird, wenn die Gegenstände einige Zeit dauern, zu verarbeiten, indem ein Schriftsteller, fast alle threads im thread-pool am Ende gar nichts tun, anstatt der Verarbeitung, nur die langsame Schriftsteller arbeitet.

Blick auf Spring Batch code, Ursache zu sein scheint, in dieses Paket ein:

  • org/springframework/batch/wiederholen/support/

Ist diese Art zu arbeiten eine Funktion oder ist es eine Einschränkung/Fehler ?

Wenn es ein feature ist, was ist die Art von Konfiguration, um alle threads ohne ausgehungert durch die lange Verarbeitung die zimmerreserviereung, ohne das alles umschreiben ?

Beachten Sie, dass, wenn alle Elemente die gleiche Zeit, alles funktioniert einwandfrei und multi-threading ist OK, aber wenn einem der Artikel, die Verarbeitung braucht viel mehr Zeit, dann wird multi-threading ist fast nutzlos für die Zeit der langsame Prozess funktioniert.

Beachten, öffnete ich dieses Problem:

InformationsquelleAutor pmpm | 2013-08-15
Schreibe einen Kommentar