Spring batch spring批处理中步骤间的数据交换

Spring batch spring批处理中步骤间的数据交换,spring-batch,Spring Batch,我有一个由以下组件组成的工作 处理步骤-激活一个外部处理,将其结果记录在数据库中,并返回一个内部id,以便我可以获取该id并进一步处理它 日志记录步骤-由包含块的tasklet构建 该区块是由一个条目读取器构建的,我计划使用#{stepExecutionContext['job.id']}作为xml文件中编写的sql的一部分,这样它将获得相关的日志信息 我正在尝试使用此处建议的解决方案,但当我尝试在步骤执行上下文或作业执行上下文上添加属性时,会出现此错误 chunkContext.getStep

我有一个由以下组件组成的工作

  • 处理步骤-激活一个外部处理,将其结果记录在数据库中,并返回一个内部id,以便我可以获取该id并进一步处理它
  • 日志记录步骤-由包含块的tasklet构建
  • 该区块是由一个条目读取器构建的,我计划使用#{stepExecutionContext['job.id']}作为xml文件中编写的sql的一部分,这样它将获得相关的日志信息

    我正在尝试使用此处建议的解决方案,但当我尝试在步骤执行上下文作业执行上下文上添加属性时,会出现此错误

    chunkContext.getStepContext().getStepExecutionContext().put("job.id", jobId);
    
    我得到了这个错误:

    java.lang.UnsupportedOperationException: null
    at java.util.Collections$UnmodifiableMap.put(Collections.java:1342)
    at  ...
    at  org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:395)
    

    我错过什么了吗

    ChunkContext提供的StepContext是只读对象;使用
    StepExecutionListener
    并将作为参数传递的步骤执行上下文保存在方法
    StepExecutionListener.afterStep(StepExecution StepExecution)
    chunkContext.getStepExecutionContext().getStepExecutionContext()中

    我始终遵循以下路径:

    chunkContext
        .getStepContext()
        .getStepExecution()
        .getJobExecution()
        .getExecutionContext()
        .put("", "");
    
    我在执行put步骤时也遇到了问题。 当它进入下一步时,可能会丢失数据。
    不过,我把最后一句话留给最专业的人。

    请在您的答案上添加一些解释。