我有一个要求,其中微线程将目录中的所有文件存储在一个arraylist中。列表的大小存储在作业执行上下文中。稍后,在另一个步骤中从另一个微线程访问此计数。它是如何做到这一点的。我尝试存储在作业执行上下文中,在运行时抛出不可修改的集合异常,
public RepeatStatus execute(StepContribution arg0, ChunkContext arg1)
throws Exception {
StepContext stepContext = arg1.getStepContext();
StepExecution stepExecution = stepContext.getStepExecution();
JobExecution jobExecution = stepExecution.getJobExecution();
ExecutionContext jobContext = jobExecution.getExecutionContext();
jobContext.put("FILE_COUNT",150000);
我还在前面的注释.still not possioble.kindly中存储了stepexection引用,让我知道如何在两个微线程之间共享数据。
发布于 2012-02-06 18:41:30
另一种方法是使用在步骤执行后调用的StepExecutionListener
。你的微线程可以实现它并共享本地属性。
public class ReadingJobExecutionContextTasklet implements Tasklet, StepExecutionListener {
private String value;
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
ExecutionContext jobExecutionContext = stepExecution.getJobExecution().getExecutionContext();
jobExecutionContext.put("key", value);
//Return null to leave the old value unchanged.
return null;
}
}
因此,在该步骤中,您的bean是一个tasklet和一个类似bellow的侦听器。您还应该将您的步骤的作用域配置为" step“:
<batch:step id="myStep" next="importFileStep">
<batch:tasklet>
<ref bean="myTasklet"/>
<batch:listeners>
<batch:listener ref="myTasklet"/>
</batch:listeners>
</batch:tasklet>
</batch:step>
<bean id="myTasklet" class="ReadingJobExecutionContextTasklet" scope="step">
https://stackoverflow.com/questions/8117060
复制相似问题