文件支持
Spring Integration 的文件支持通过专用词汇扩展了 Spring Integration 核心,以处理文件的读取、写入和转换。
你需要将这个依赖添加到你的项目中:
- Maven
- Gradle
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-file</artifactId>
<version>6.4.2</version>
</dependency>
compile "org.springframework.integration:spring-integration-file:6.4.2"
它提供了一个命名空间,该命名空间启用了专门用于文件的通道适配器元素,并支持可以将文件内容读取到字符串或字节数组的转换器。
本节解释了 FileReadingMessageSource
和 FileWritingMessageHandler
的工作原理以及如何将它们配置为 beans。还讨论了通过文件特定实现的 Transformer
来处理文件的支持。最后,它解释了文件特定的命名空间。
部分总结
📄️ 读取文件
FileReadingMessageSource 可用于从文件系统中读取文件。这是 MessageSource 的一个实现,它从文件系统目录创建消息。以下示例展示了如何配置 FileReadingMessageSource:
📄️ 编写文件
要将消息写入文件系统,你可以使用 FileWritingMessageHandler。这个类可以处理以下有效载荷类型:
📄️ 文件转换器
要将从文件系统读取的数据转换为对象,反之亦然,你需要做一些工作。与 FileReadingMessageSource 以及在较小程度上与 FileWritingMessageHandler 不同,你可能需要自己的机制来完成这项工作。为此,你可以实现 Transformer 接口。或者,你可以扩展 AbstractFilePayloadTransformer 以用于传入消息。Spring Integration 提供了一些明显的实现。
📄️ 文件分割器
FileSplitter 在版本 4.1.2 中被添加,在版本 4.2 中添加了命名空间支持。FileSplitter 基于 BufferedReader.readLine() 将文本文件拆分为单个行。默认情况下,拆分器使用一个迭代器 (Iterator) 来逐行发出读取自文件的内容。将迭代器属性设置为 false 会导致它在发出它们作为消息之前,先将所有行读入内存。这种用法的一个场景可能是如果你想在发送包含行的消息之前检测文件的 I/O 错误。但是,这仅适用于相对较短的文件。
📄️ 文件聚合器
从 5.5 版本开始,引入了 FileAggregator 以覆盖在启用 START/END 标记时 FileSplitter 的另一种使用场景。为了方便,FileAggregator 实现了所有三种序列详情策略:
📄️ 远程持久文件列表过滤器
传入和流式传入远程文件通道适配器(FTP、SFTP 和其他技术)默认配置有相应实现的 AbstractPersistentFileListFilter,并配置了内存中的 MetadataStore。要在集群中运行,这些适配器可以替换为使用共享 MetadataStore 的过滤器(更多信息请参见 Metadata Store)。这些过滤器用于防止多次获取相同的文件(除非其修改时间发生了变化)。从 5.2 版本开始,在文件被获取之前会立即将其添加到过滤器中(如果获取失败则会撤销)。