我在spring批处理中得到了上述问题的解决方案,需要在process listener中指定jobscope,并在listner类代码中访问作业执行上下文,如下所述。
@Bean
@JobScope
public CaliberatedProcessorListener calibratedProcessorListener() {
return new CaliberatedProcessorListener();
}
public class CaliberatedProcessorListener <T, S> implements ItemProcessListener<T, S> {
@Value("#{jobExecution}")
public JobExecution jobExecution;
@Override
public void beforeProcess(T calibratedProessorInPut) {
}
@Override
public void afterProcess(T calibratedProessorInput, S calibratedProessorOutPut) {
}
@Override
public void onProcessError(T item, Exception calibratedProcessorEx) {
FtpEmailData ftpEmailData = (FtpEmailData) jobExecution.getExecutionContext().get("calDeviceBatchInfo");
ftpEmailData.getExceptionList().add(new CalibratedDeviceException(calibratedProcessorEx.getMessage()));
}
}