2014-12-31 20 views
5

Próbuję skonfigurować przepływ wiosną partii używając java-config, ten przepływ w zasadzie ma to zrobić:Wiosna Batch (java-config) wykonywanie krok po jobExeuctionDecider

  1. Wykonuje metody init etap (który dodaje rekord w bazie danych),

  2. następnie wykonać decydującym sprawdzić istnienie pliku,

2.1. JEŻELI pliki istnieją, wykona zadanie ładowania (które jest kolejnym przepływem z kilkoma krokami równolegle)

  1. Wykonaj krok wykończenia (który dodaje rekord do bazy danych), to powinno zawsze działać, nawet jeśli 2.1 nie zostało wykonane.

Próbowałem zrobić tę konfigurację, ale nie prowadzi krok wykończenie:

 Flow flow = new FlowBuilder<SimpleFlow>("commonFlow") 
      .start(stepBuilderFactory.get("initStep").tasklet(initTasklet).build()) 
      .next(decider) 
       .on(FlowExecutionStatus.COMPLETED.getName()) 
        .to(splitFlow) 
       .from(decider).on("*") 
        .end() 
    .next(stepBuilderFactory.get("finishStep").tasklet(finishTasklet).build()) 
      .end(); 

jestem w stanie zrobić to praca robi jak poniżej, ale to nie jest eleganckie w ogóle:

Step finishStep = stepBuilderFactory.get("finishStep").tasklet(finishTasklet).build(); 

    Flow flow = new FlowBuilder<SimpleFlow>("commonFlow") 
      .start(stepBuilderFactory.get("initStep").tasklet(initTasklet).build()) 
      .next(decider) 
       .on(FlowExecutionStatus.COMPLETED.getName()) 
        .to(splitFlow) 
        .next(finishStep) 
       .from(decider).on("*") 
        .to(finishStep) 
      .end(); 

Czy ktoś wie, w jaki sposób można wykonać krok po decyzji przy użyciu java-config?

+0

W swoim pierwszym kodzie przykładowym uwzględniono dwa "koniec()". Spróbuj usunąć pierwszy "koniec"(). –

+0

Powrót .on jest TransitionBuilder, muszę mieć coś po on. Próbowałem również postawić głupi krok po tym, ale nie działał. –

Odpowiedz

1

Wygląda na to, że jest to DUŻO bardziej skomplikowane, niż powinno być. Nie musisz konfigurować przepływu lub decydenta. To jest BARDZO prosta robota.

Najprostszą opcją jest użycie Spring Integration do wykrywania prezentacji pliku i wyzwalania zadania.

Następną najprostszą opcją jest po prostu sprawdzenie działania kwarcu lub CRON dla pliku i rozpoczęcie zadania wsadowego.

Wreszcie możesz uruchomić zadanie i jeśli ItemReader nie może znaleźć pliku, po prostu połknij wyjątek. Lub ustaw Listener FileItemReader do sprawdzania plików na jego przed metody.

+0

To tylko część całego przepływu. Jak widzisz, funkcja finishFlow powinna zostać wykonana niezależnie od tego, czy plik istnieje, czy nie. Przedstawione opcje będą wyzwalane tylko po utworzeniu pliku. Pytanie dotyczy samej konfiguracji. –

+0

Dobrze, jeśli nie ma znaczenia, czy plik istnieje, czy nie, dlaczego jest używany decydent. Po prostu uruchom pracę. Sprawdza, czy plik uruchamia kroki, w tym ostatnią. – BrianC