在Spring Batch中从处理器调用另一个作业 [英] Calling another job from a processor in spring batch

查看:33
本文介绍了在Spring Batch中从处理器调用另一个作业的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个读取和处理输入文件的作业(=作业)-此作业是使用读取器、编写器、多个处理器、侦听器和异常处理程序定义的,我主要出于向后兼容原因不想更改此作业定义

我要实现另一个作业(=Jobb),该作业按照一定的标准和顺序从目录中读取文件,然后发送要由Joba处理的文件

我正在查看[MultiResourceItemReader][1]

[1]:http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/file/MultiResourceItemReader.html"MultiResourceItemReader",但我不知道如何将对作业的调用合并到此

可以吗?

推荐答案

考虑用第二个作业包装正在退出的作业,并在Batch:Step元素中使用带有Job-Parameters-Extractor的Batch:Job元素。

外部作业应包含所需文件列表的逻辑和决策器。 Batch:JOB将使用org.springframework.batch.core.step.job.JobParametersExtractor接口调用您正在退出的作业和作业参数提取器,该接口将复制所需的 内部作业的文件路径。

查看以下answer我使用上述元素的位置。

从逻辑上讲,您的工作看起来像

<batch:job id="jobWrapper" incrementer="runIdIncrementer" >
        <batch:step id="createFileList" next="callInternalJob">
            <batch:tasklet ref="fileterRequiredFilesTasklet"/>
        </batch:step>
        <batch:step id="callInternalJob" next="hasMoreFileDecision">
            <batch:job ref="yourJob" job-launcher="jobLauncher"
                job-parameters-extractor="extractCurrentFileParam" />
        </batch:step>
        <batch:decision id="hasMoreFileDecision" decider="hasMoreFileDecider">
            <batch:next on="NEXTFILE" to="callInternalJob" />
            <batch:end  on="COMPLETED" exit-code="COMPLETED" />
        </batch:decision>
    </batch:job>  

fileterRequiredFilesTasklet-创建所需文件列表并将其存储在作业执行上下文中 callInternalJob-调用您正在退出的作业,并通过callInternalJob将当前文件传递给进程 hasMoreFileDecider-将循环遍历fileterRequiredFilesTasklet ul创建的文件列表,直到处理完所有文件。

这篇关于在Spring Batch中从处理器调用另一个作业的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆