2017-04-13 9 views
0

私はこの仕事を持っていますが、それを実行するとパーティショナーのbeforeStepメソッドが呼び出されることはありません。私は間違って何をしていますか?PartitionerはStepExecutionListenerを実装しますが、beforeStepは呼び出されません

@Configuration 
public class SomeJob { 

@Bean(name = "some-job") 
public Job job() { 
    return jobBuilderFactory.get(getName()) 
      .incrementer(new RunIdIncrementer()) 
      .start(stepOne()) 
      .next(stepTwo()) 
      .build(); 
} 

private Step stepOne() { 
    TaskletStep stepOne = stepBuilderFactory 
      .get("step-one") 
      .<...>chunk(CHUNK_SIZE) 
      .reader(someReader()) 
      .writer(someWriter()) 
      .build(); 

    return stepBuilderFactory 
      .get("partitionedStepOne") 
      .partitioner(stepOne) 
      .partitioner("partition", partitioner()) 
      .taskExecutor(someExecutor()) 
      .gridSize(SIZE) 
      .build(); 
} 


@Bean 
@Scope(value = "step", proxyMode = ScopedProxyMode.TARGET_CLASS) 
Partitioner partitioner() { 
    return new OffsetBasedPartitioner(NAME, storedArticleMasterDataRepository); 
} 
} // end of job class 
.... 

public class OffsetBasedPartitioner implements Partitioner, StepExecutionListener { 

@Override 
public void beforeStep(StepExecution stepExecution) { 
    ... 
} 
... 
} 

可能であれば、xml構成ファイルは使用しません。

+2

私はしないでくださいJavaConfigについてよく知っていますが、partitioner()はリスナーとして自動的に登録されていないと思いますが、手動で登録する必要があります –

+0

@LucaBassoRicciに感謝します。注釈が十分か、XML設定が必要ですか? –

+1

StepBuilderでlistener()メソッドを見つけることができます –

答えて

0

彼の提案のための@LucaBassoRicciのおかげで、私はステップの定義にリスナーとしてパーティを追加しました:

return stepBuilderFactory 
     .get("partitionedStepOne") 
     .partitioner(stepOne) 
     .partitioner("partition", partitioner()) 
     .listener(partitioner()) 
     .taskExecutor(someExecutor()) 
     .gridSize(SIZE) 
     .build(); 

を、上記のようにすべての残りの部分を残し、今では動作します:)

関連する問題