spring-batchで以下のように、Tasklet
に@BeforeStep
を付与するメソッドを追加しても意図通りの動作をしない。
@Component
public class MyTasklet implements Tasklet {
@BeforeStep
void beforeStep(StepExecution stepExecution) {
System.out.println("asdfasdf");
}
原因
恐らくだが、Tasklet
にはリスナーの自動登録が無いため、と思われる。
ItemReaderとかの実装クラスにStepExecutionListenerとかのリスナーを実装しとくと、(少なくともspring-bootと一緒にspring-batch動かす分には)そのリスナーも自動登録する
spring-batchはreaderとかでリスナー実装すると自動登録 を参照。
上記の通り、ItemReader
とかはリスナーの自動登録が有るがTasklet
には無い、のが原因と思われる。ソースとかドキュメントをちゃんと追ってないので推測でしかないが。
解決策
execute
メソッド引数のchunkContext
を使うか、StepExecutionListener
を実装。