Java 如何编辑ExecutionContext spring批处理

Java 如何编辑ExecutionContext spring批处理,java,spring,spring-batch,executioncontext,Java,Spring,Spring Batch,Executioncontext,除了read()、updated()和open()方法之外,是否有其他方法可以在executioncontext中添加条目 就像下面的代码一样,我试图在close方法中添加条目 public class MyFileReader extends FlatFileItemReader<AccountDetails>{ private long currentRowProcessedCount = 0; @Autowired private ExecutionConte

除了read()、updated()和open()方法之外,是否有其他方法可以在executioncontext中添加条目

就像下面的代码一样,我试图在close方法中添加条目

public class MyFileReader extends FlatFileItemReader<AccountDetails>{
private long currentRowProcessedCount = 0;

    @Autowired
    private ExecutionContext executionContext;

    @Override
    public synchronized AccountDetails read() throws Exception, UnexpectedInputException, ParseException {      
        AccountDetails accDetailsObj = super.read();

        currentRowProcessedCount++;

        return accDetailsObj;
    }   

    @Override
    public void open(ExecutionContext executionContext) throws ItemStreamException {
        super.open(executionContext);

        currentRowProcessedCount = executionContext.getLong(Constants.CONTEXT_COUNT_KEY.getStrValue(),0);
        this.executionContext = executionContext;
    }

    @Override
    public void update(ExecutionContext executionContext) throws ItemStreamException {  


        executionContext.putLong(Constants.CONTEXT_COUNT_KEY.getStrValue(), currentRowProcessedCount);
    }


    @Override
    public void close() throws ItemStreamException {
        System.out.println("close --------------"+currentRowProcessedCount);
        System.out.println(executionContext.getLong(Constants.CONTEXT_COUNT_KEY.getStrValue()));
         this.executionContext.putLong(Constants.CONTEXT_COUNT_KEY.getStrValue(), currentRowProcessedCount);


    }
 }
我还需要更新其他类中的executionContext。 有什么办法吗?

您只需使用
put(字符串键,对象值)
覆盖现有的值。 ExecutionContext由
ConcurrentHashMap
支持,因此如果您确实需要它,可以通过反射获取对它的引用,然后使用
ComputeFabSent


另外,计数已经在
AbstractItemCountingItemStreamItemReader中实现,如果您继承了它(并且您是),那么应该已经解决了这个问题。

已经在另一个类中尝试了put(,)。请查看更新的代码。。我想在mapper类中编辑executioncontext,在当前代码中,我只能读取数据。如果我将数据放入批处理表中的执行上下文中,它不会反映在我不理解的步骤执行上下文表中。你的目标是什么?是否要将
ExecutionContext
传播到
StepContext
?要重试作业,我需要作业失败时的精确值/计数。。从这一点上,我想重试作业。。在当前情况下,如果作业执行失败,它将存储块值而不是块失败的确切位置。您可以共享读卡器的配置吗?
class abc{
@Autowired
private ExecutionContext executionContext;

    public AccountDetails mapFieldSet(FieldSet fieldSet) throws BindException {

                    executionContext.putLong(Constants.CONTEXT_COUNT_KEY.getStrValue(), 47);

        return accDetailsObj;
        }

}