2016-03-01 52 views
0

我使用沒有xml配置的spring批處理。我想創建一個由幾個步驟組成的作業,並且我想對同一個作業進行多次迭代。所以基本上我想創建一個由幾個步驟組成的流程,最後一步使用監聽器檢查一個條件,如果條件滿足Job結束時返回一個狀態,如果條件不滿足,則它返回到第一步。Spring批處理作業執行iteraton使用註釋

我試圖用編程方式創建它,沒有運氣,我簡化它到最簡單的解決方案有兩個步驟。

public class MyListener { 

    int iterations = 0; 

    @AfterStep 
    public ExitStatus afterStep(StepExecution stepExecution) { 
     if(3 > iterations) { 
      iterations ++; 
      return new ExitStatus("CONTINUE"); 
     } 
     else { 
      iterations=0; 
      return new ExitStatus("FINISHED"); 
     } 
    } 
} 
@Bean 
public MyListener listener() { 
    return new MyListener(); 
} 
@Bean 
public Step step() { 
    return stepBuilderFactory.get("step").<Object, Object> chunk(1).reader(dummyReader()) 
      .processor(logItemProcessor()).writer(logItemWriter()).build(); 
} 

@Bean 
public Step step2() { 
    return stepBuilderFactory.get("step").<Object, Object> chunk(1).reader(secondReader()) 
      .processor(logItemProcessor()).writer(logItemWriter()).listener(listener()).build(); 
} 
@Bean 
public Job jobtest2() { 
    return jobBuilderFactory.get("testJob2") 
      .start(step()) 
      .next(step2()).on("CONTINUE").to(step()).on("FINISHED").end().build() 
      .build(); 
} 

這是我最後atemp但ID不會似乎工作

+0

你什麼意思是「沒有運氣」?什麼有效,什麼不起作用?豆子是否被撿起並注入某個地方?哪裏?你如何開始該計劃? jobtest2()甚至被調用? – Heri

+0

不要使用監聽器,而要使用JobExecutionDecider來重定向作業流程 –

+0

道歉這是一個錯字「沒有運氣」。豆沒有被注入任何其他地方。我從休息服務使用joblauncher開始工作 – silvestrelosada

回答

0

我知道什麼是錯我的代碼,這兩個步驟具有相同的「臺階」

@Bean 
public Step step() { 
    return stepBuilderFactory.get("step").<Object, Object> chunk(1).reader(dummyReader()) 
      .processor(logItemProcessor()).writer(logItemWriter()).build(); 
} 

@Bean 
public Step step2() { 
    return stepBuilderFactory.get("step2").<Object, Object> chunk(1).reader(secondReader()) 
      .processor(logItemProcessor()).writer(logItemWriter()).listener(listener()).build(); 
} 

如果我改變第二個豆「step2」它開始工作

相關問題