Spring集成,删除出站通道适配器中的文件

Spring集成,删除出站通道适配器中的文件,spring,integration,delete-file,channel,outbound,Spring,Integration,Delete File,Channel,Outbound,我正在使用SpringIntegration轮询文件目录,在服务类中处理该文件,将该文件写入输出目录,然后删除原始文件 我有以下XML配置: <int-file:inbound-channel-adapter id="filesInChannel" directory="file:${java.io.tmpdir}/input" auto-c

我正在使用SpringIntegration轮询文件目录,在服务类中处理该文件,将该文件写入输出目录,然后删除原始文件

我有以下XML配置:

  <int-file:inbound-channel-adapter id="filesInChannel"
                                    directory="file:${java.io.tmpdir}/input" 
                                    auto-create-directory="true"  >
      <int:poller id="poller" fixed-delay="1000" />
  </int-file:inbound-channel-adapter>

  <int:service-activator id="servicActivator"
                         input-channel="filesInChannel"
                         output-channel="filesOut"
                         ref="my_file_processing_service">
  </int:service-activator>

  <int-file:outbound-channel-adapter  id="filesOut" auto-create-directory="true" delete-source-files="true" directory="file:${java.io.tmpdir}/output"/>

这将轮询文件,将其传递给my processing_服务,并将其复制到出站目录。但是,不会删除原始文件。有人知道为什么不吗?

来自文档



我不知道如何在入站通道适配器上执行此操作(我认为这是有意义的)

我知道这个问题很久以前就被问到了,但也许答案对其他人有用

输入文件未被删除的原因见:

删除源文件
属性仅在 入站邮件有一个文件负载,或者如果
FileHeaders.ORIGINAL\u文件
标头值包含源文件实例或字符串 表示原始文件路径

您的邮件不包含此特定标题。如果您使用(
FileToStringTransformer
FileToByteArrayTransformer
)中的一个,它将自动设置。或者,您可以使用手动设置

在文件转换器中发生了类似的情况:

...
Message<?> transformedMessage = MessageBuilder.withPayload(result)
        .copyHeaders(message.getHeaders())
        .setHeaderIfAbsent(FileHeaders.ORIGINAL_FILE, file)
        .setHeaderIfAbsent(FileHeaders.FILENAME, file.getName())
        .build();
...
。。。
Message transformedMessage=MessageBuilder.withPayload(结果)
.copyHeaders(message.getHeaders())
.setHeaderIfAbsent(FileHeaders.ORIGINAL_文件,文件)
.setHeaderIfAbsent(FileHeaders.FILENAME,file.getName())
.build();
...
...
Message<?> transformedMessage = MessageBuilder.withPayload(result)
        .copyHeaders(message.getHeaders())
        .setHeaderIfAbsent(FileHeaders.ORIGINAL_FILE, file)
        .setHeaderIfAbsent(FileHeaders.FILENAME, file.getName())
        .build();
...