首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从微线程存储在JobExecutionContext中,并在另一个微线程中访问

从微线程存储在JobExecutionContext中,并在另一个微线程中访问
EN

Stack Overflow用户
提问于 2011-11-14 11:42:18
回答 1查看 81.1K关注 0票数 24

我有一个要求,其中微线程将目录中的所有文件存储在一个arraylist中。列表的大小存储在作业执行上下文中。稍后,在另一个步骤中从另一个微线程访问此计数。它是如何做到这一点的。我尝试存储在作业执行上下文中,在运行时抛出不可修改的集合异常,

代码语言:javascript
复制
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引用,让我知道如何在两个微线程之间共享数据。

EN

回答 1

Stack Overflow用户

发布于 2012-02-06 18:41:30

另一种方法是使用在步骤执行后调用的StepExecutionListener。你的微线程可以实现它并共享本地属性。

代码语言:javascript
复制
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“:

代码语言:javascript
复制
    <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">
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8117060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档