我有一个工作(= JobA )读取和处理输入文件 - 这个Job是使用读取器,编写器,几个处理器,监听器和异常处理程序定义的,我不想主要出于向后兼容性的原因更改此作业定义
我想实现另一个作业(= JobB ),该作业从具有特定条件的目录中读取文件并按特定顺序,然后发送要由 JobA 处理的文件
我正在研究[MultiResourceItemReader] [1]
[1]:http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/file/MultiResourceItemReader.html "MultiResourceItemReader"但是我看不出如何将对 JobA 的调用合并到此
可能吗?
1 回答
考虑使用第二个作业包装退出作业,并在batch:step元素中使用batch:job元素和job-parameters-extractor .
外部作业应包含所需文件列表的逻辑和决策程序 . batch:job将使用org.springframework.batch.core.step.job.JobParametersExtractor接口调用您的退出作业和作业参数提取器,该接口将所需的文件路径复制到内部作业 .
看看下面的answer我使用了上面的元素 .
从逻辑上讲,你的工作看起来像
fileterRequiredFilesTasklet - 创建所需文件列表并将其存储在作业执行上下文中 callInternalJob - 调用您正在退出的作业并通过callInternalJob传递当前文件进行处理 hasMoreFileDecider - 将循环遍历由fileterRequiredFilesTasklet util创建的文件列表 .