在我的批处理作业中,我需要找到旧文件的差异并收到新文件,并仅插入/更新差异记录。我使用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 '<' -e '>' | 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分钟。所以我的需要是,只有在创建文件之后,才能执行下一步。