【问题标题】:Calling another job from a processor in spring batch在春季批处理中从处理器调用另一个作业
【发布时间】:2014-12-21 21:36:51
【问题描述】:

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

我想实现另一个作业(=JobB),它从具有特定条件和特定顺序的目录中读取文件,然后将文件发送给JobA处理强>

我正在研究 [MultiResourceItemReader][1]

[1]: http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/file/MultiResourceItemReader.html "MultiResourceItemReader" 但我不知道如何将调用 JobA 纳入其中

有可能吗?

【问题讨论】:

    标签: java spring-batch


    【解决方案1】:

    考虑用第二个作业包装现有作业,并在批处理:步骤元素中使用带有作业参数提取器的批处理:作业元素。

    外部作业应包含您的所需文件列表的逻辑和决定者。 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 util 创建的所有文件列表。

    【讨论】:

    • 谢谢 - 这正是我想要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2014-06-30
    • 2012-10-19
    • 1970-01-01
    • 2018-10-04
    相关资源
    最近更新 更多