2016-05-25 3 views
2

Gibt es eine Möglichkeit, ReleaseStrategy zu verwenden oder zu simulieren, wenn ich split() mit Iteratoren verwende?ReleaseStrategy für Iteratoren

@Bean 
IntegrationFlow flow(CourseRepository courseRepository, EnrollmentRepository enrollmentRepository) { 
return IntegrationFlows.from(courseRepository, "findAllWithEnrollmentToProcess", c -> c 
    .poller(Pollers.fixedDelay(this.executionIntervalInSeconds, SECONDS))) 
    .split() 
     .transform(Course::getId) 
     .transform(enrollmentRepository::findUnprocessedEnrollments) 
     .split() 
      .handle(...) 
     // do something when split ends 
    .get(); 
} 

Beide Methoden findAllWithEnrollmentToProcess und findUnprocessedEnrollments Rückkehr einen Iterator.

Antwort

0

Das erreichen Sie nur mit einem .aggregate(). Zweimal in deinem Fall.

Wir haben ein ähnliches Beispiel in der XML-Konfiguration:

<splitter id="upstream-splitter" input-channel="splitter" output-channel="upstream-splits" /> 

<splitter id="downstream-splitter" input-channel="upstream-splits" output-channel="downstream-splits" /> 

<aggregator id="first-aggregator" input-channel="downstream-splits" output-channel="pre-output" /> 

<aggregator id="second-aggregator" input-channel="pre-output" /> 

Aber das ist genau das gleiche für den Java-DSL-Konfig.

Obwohl Ihr Problem, dass Sie wirklich die richtige ReleaseStrategy für Sie Anwendungsfall herausfinden müssen, da Sie nicht wissen, die Größe Ihrer Iteratoren.

+0

Ich verwende nicht .aggregate() mehr. Jetzt, vor .split() speichere ich den Iterator in einem Header und ich .filter ("headers ['iterator']. HasNext()") mit einem Verwerfungskanal. –