从 LineCallbackHandler 共享 object 到 ExecutionCOntext

Sharing object from LineCallbackHandler to ExecutionCOntext

我有一个 csv 文件,顶部有一行被认为是 header。 我的 reader 配置如下:

FlatFileItemReader<EncCreditEntrepIndDTO> reader = new FlatFileItemReaderBuilder<EncCreditEntrepIndDTO>()
            .strict(false)
            .resource(resource)
            .linesToSkip(1)
            .skippedLinesCallback(headerHandler)
            .lineMapper(mapper)
            .saveState(false)
            .build();
    return reader;

这是我的 LineCallbackHandler :

public class HeaderHandler implements LineCallbackHandler {


@Override
public void handleLine(String line) {
    AtomicReference<StepHeader> headerLine = new AtomicReference<>();
    processLine(line, headerLine);

}

处理完 header 行后,我想将其保存在执行上下文中以便稍后在某些步骤中使用。 我尝试实施 StepListener,然后实施 StepExecutionListener 并检索实际上下文。它总是等于 null

I tried implementing StepListener and then StepExecutionListener and retrieve the actual context. It is always equals to null

如果您在以下步骤中将回调处理程序注册为侦听器,那么实施 StepExecutionListener 应该可行:

@Bean
public FlatFileItemReader<EncCreditEntrepIndDTO> itemReader(HeaderHandler headerHandler) {
    return new FlatFileItemReaderBuilder<EncCreditEntrepIndDTO>()
            // ...
            .skippedLinesCallback(headerHandler)
            .build();
}

@Bean
public Step step(StepBuilderFactory stepBuilderFactory, HeaderHandler headerHandler) {
    return stepBuilderFactory.get("step")
            .<EncCreditEntrepIndDTO, EncCreditEntrepIndDTO>chunk(5)
            .reader(itemReader(headerHandler))
            .writer(itemWriter())
            .listener(headerHandler)
            .build();
}