我的应用程序如下所示:读入文件,对其进行路由,将其转换为POJO然后再返回,然后再次将其写入磁盘。
我正在使用FileWritingMessageHandler来写出我的文件并进行设置
handler.setDeleteSourceFiles(true);
现在,对于我不转换为POJO的文件来说,这很好用,但是我有一些JSON文件,我将其转换为POJO,然后又转换回JSON文件,我也想写回并删除旧文件。我正在设置OriginalFile标头并在将POJO转换回JSON之前和之后对其进行检查,这是正确的路径,但不会被删除。
如果FileWritingMessageHandler看到包含文件作为有效负载的消息,是否会忽略标头?如果是这样,我该如何删除它而不手动删除源文件?
编辑
我对FileWritingMessageHandler的实现进行了更深入的研究,如果它是File对象,则确实会忽略标头。所以我只需要手动删除它。
最佳答案
是的,您的调查是正确的。
看代码:
if (payload instanceof File) {
resultFile = this.handleFileMessage((File) payload, tempFile, resultFile);
}
因此,在这种情况下,
FileWritingMessageHandler
originalFileFromHeader
因为没有意义,因为我们已经有一个原始的File
作为payload
。执行此操作后:
if (this.deleteSourceFiles) {
if (sourceFile.renameTo(resultFile)) {
return resultFile;
}
因此,您在
payload
中的文件仍将被删除。但是由于它与标头中的文件不同,因此实际上不会自动删除它。为此,您可以使用以下方法:
<file:outbound-channel-adapter>
<file:request-handler-advice-chain>
<bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
<property name="onSuccessExpressionString" value="headers[file_originalFile].delete()"/>
</bean>
</file:request-handler-advice-chain>
</file:outbound-channel-adapter>