我创建了一个Header Handler类,在其中将标头的值放入Execution上下文中。handleLine,beforeStep和afterStep方法已经实现。但是当我运行应用程序时,handleLine方法被调用,并且我获得标头的值但是由于某种原因,beforeStep和afterStep不会被调用。我不确定为什么。下面是代码片段:

public class HeaderLineHandler implements LineCallbackHandler,StepExecutionListener {

        StepExecution stepExecution;
        public void handleLine(final String headerLine) {
            stepExecution.getExecutionContext().put("headerKey",headerLine);
        }

        @Override
        public ExitStatus afterStep(StepExecution stepExecution) {
            // TODO Auto-generated method stub

            JobExecution jobExecution = stepExecution.getJobExecution();
            ExecutionContext jobContext = jobExecution.getExecutionContext();
            System.out.println("Header value" + (String)jobContext.get("headerKey"));

            return  stepExecution.getExitStatus();
        }

        @Override
        public void beforeStep(StepExecution stepExecution) {
            // TODO Auto-generated method stub
            this.stepExecution = stepExecution;
        }
}


请指教。

谢谢

最佳答案

HeaderLineHandler注册为步骤侦听器。
之所以必须这样做,是因为-正如在doc中的某个地方所写-框架仅将一流的项目(可以肯定是步骤,读者,作家和处理器,其他我现在不记得的其他项目)自动注册为侦听器。

09-15 21:52