代码之家  ›  专栏  ›  技术社区  ›  Abdul Gaffar Khan

Spring Batch如何在Process Listner中获取JobExecution对象

  •  1
  • Abdul Gaffar Khan  · 技术社区  · 7 年前

    我尝试在processListner中使用@beforestep,但JobExecution对象为null。有什么方法可以在processListner中获取JobExecution上下文吗

    1 回复  |  直到 7 年前
        1
  •  1
  •   Abdul Gaffar Khan    7 年前

    我在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) {
    
            // // do nothing
        }
    
        @Override
        public void afterProcess(T calibratedProessorInput, S calibratedProessorOutPut) {
    
            // do nothing
        }
    
        @Override
        public void onProcessError(T item, Exception calibratedProcessorEx) {
    
            FtpEmailData ftpEmailData = (FtpEmailData) jobExecution.getExecutionContext().get("calDeviceBatchInfo");
            ftpEmailData.getExceptionList().add(new CalibratedDeviceException(calibratedProcessorEx.getMessage()));
        }
    
    }