Calling another job from a processor in spring batch(在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中从处理器调用另一个作业的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在Spring Batch中从处理器调用另一个作业


基础教程推荐
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01