gpt4 book ai didi

java - 在 Spring 批处理中从处理器调用另一个作业

转载 作者:行者123 更新时间:2023-12-05 01:06:13 26 4
gpt4 key购买 nike

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

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

我正在调查 [MultiResourceItemReader][1]

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

这可能吗?

最佳答案

考虑用第二个作业包装现有作业,并在 batch:step 元素中使用 batch:job 元素和 job-parameters-extractor。

外部作业应包括您的所需文件列表逻辑和决策程序。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 创建的文件列表,所有文件都已处理。

关于java - 在 Spring 批处理中从处理器调用另一个作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com