Java 如何编辑ExecutionContext spring批处理
除了read()、updated()和open()方法之外,是否有其他方法可以在executioncontext中添加条目 就像下面的代码一样,我试图在close方法中添加条目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
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;
}
}