在我的批处理作业中,我需要找到旧文件和收到的新文件的差异,并仅插入/更新差异记录 . 我使用diff命令为此创建了一个系统命令tasklet,如下所示:

<bean id="fileDiffTasklet" class="org.springframework.batch.core.step.tasklet.SystemCommandTasklet" scope="step">
<property name="command" value="diff #{jobParameters['SOURCE_FILE']} #{jobParameters['PREVIOUS_FILE']} |  grep -e &apos;&lt;&apos; -e &apos;&gt;&apos; | grep -x '.\{#{jobParameters['LINE_LENGTH']}\}' > #{jobParameters['input.file.name']}"/>
<property name="timeout" value="2000000"/>
<property name="workingDirectory" value="/INBOOUND/"/>
</bean>

我正在将输出传递给一个文件,因此在基于块的tasklet中,我读取了包含diff记录的文件,处理并单独写入这些记录 . 但是系统命令tasklet会执行但不会将输出传递给文件 .

在这种情况下,我可以在shell脚本中使用命令并通过将作业参数作为参数传递给shell脚本从System命令tasklet启动该脚本吗?如果这会将脚本输出重定向到文件,系统命令tasklet会等到脚本执行完毕吗?由于文件的大小非常大,因此完成diff命令大约需要5分钟 . 所以我的需要是,只有在创建文件后,才能执行下一步 .