Spring 集成输入文件适配器 - Where/when 文件内容是否应该进入消息负载?

Spring Integration input file adapter - Where/when should file contents enter message payload?

我使用基于文件的入站通道适配器启动了一个 Spring 集成项目,到目前为止它运行良好。但是我意识到我似乎没有正确地实现这个概念,想在这里寻求一些关于如何纠正它的建议。

在SpringXML声明中,适配器声明为:

<file:inbound-channel-adapter id="filesIn" directory="file:/tmp/input" prevent-duplicates="true">
    <int:poller id="poller" fixed-delay="500"/>
</file:inbound-channel-adapter>
<int:service-activator input-channel="filesIn" output-channel="filesOut" ref="fileHandler" method="handleUpdate" />
<bean id="fileHandler" class="com.myproj.integration.FileUpdater"/>
<file:outbound-channel-adapter id="filesOut" directory="file:/tmp/output" delete-source-files="true" />

在我的 FileUpdater class 中,方法 handleUpdate() 被赋予文件类型的输入:

public File handleUpdate(File input) throws ParseException, FileNotFoundException, IOException {
    ......
}

自从我能够使用输入参数读取文件并获得我需要的所有内容后,我就能够做我需要做的一切来完成我的业务逻辑。

但是,我非常清楚我现在处理这个问题的方式(在我所有的服务激活器中直接从文件系统读取文件)意味着我无法更改为使用另一个入站通道适配器(比如HTTP) 而不会影响整个集成链的代码。

我认为通过集成链传递的 Message 对象应该是 File 本身的内容,而不是对文件系统本身上的 File 的引用。

问题是:Spring 集成是否会执行将文件内容放入我的消息负载中的工作?还是我需要自己做一些改造?

FileSplitter将一次读取一行(对于带行的基于文本的文件)。您将需要任何其他文件格式的自定义代码。如果您可以忍受将整个文件加载到内存中,您也可以使用文件到字符串(或字节)转换器。

查看 Spring XD file source and its common import file 示例。