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を実装。