在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创建的文件列表,直到处理完所有文件。
相关文章