FileWritingMessageHandler

FileWritingMessageHandler

我的应用程序如下所示:读入文件,对其进行路由,将其转换为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>

07-27 17:16