2016-05-31 3 views
0

Kann jemand helfen zu verstehen, wie die Chunk Größe 1 oder 10 von Federcontroller geliefert werden kann, um als Variable zu treten. Ob das hier mit Step Scope funktioniert? oder musst du @beforeStep schreiben?So senden Sie Spring Batch Chunk Größe von UI

@Bean

public Step step1() { 
    return stepBuilderFactory.get("step1") 
      .<Person, Person> chunk(**10**) 
      .reader(reader(null)) 
      .processor(processor()) 
      .writer(writer()) 
      .build(); 
} 

Antwort

0

Die Art und Weise Sie es funktionieren wird nicht zu tun versuchen. Damit ein Wert als Jobparameter übergeben werden kann, muss das Objekt, auf das es gesetzt wird, auf einen Schritt beschränkt sein und ein Schritt selbst darf nicht auf einen Schritt beschränkt sein. Sie können einen Schrittbereich erstellen, mit dem Sie feststellen können, ob der Chunk vollständig ist. Kurz gesagt, wenn Sie den Spring Batch CountingCompletionPolicy als Step-Scoped-Bean konfigurieren und Ihren Schritt damit konfigurieren, sollten Sie die maximale Anzahl über einen Job-Parameter festlegen können.

Sie können mehr über die CompletionPolicy lesen und es Implementierungen hier bezogen werden: http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/repeat/CompletionPolicy.html

+0

ich nicht versuchen, den Brocken zu ändern, wenn der Stapel läuft. Ich möchte es nur einstellen, bevor der Job startet. Muss das auch mit "CompletionPolicy" passieren? – Sam

+0

Ja. Das Problem, dem Sie gegenüberstehen, ist die Reihenfolge, in der Objekte erstellt werden. Ihr Schritt wird erstellt, bevor die Jobparameter analysiert werden, sodass wir keine Möglichkeit haben, sie zu injizieren. Wenn Sie eine 'CompletionPolicy' verwenden und den Schrittbereich festlegen, können Sie die Verwendung dieses Werts verzögern, bis dieser benötigt wird (und tatsächlich verfügbar ist). –