跳到主要内容

SFTP 适配器

QWen Plus 中英对照 SFTP Adapters

Spring Integration 提供了通过 SFTP 进行文件传输操作的支持。

安全文件传输协议 (SFTP) 是一种网络协议,它让你可以通过任何可靠的流,在互联网上的两台计算机之间传输文件。

SFTP 协议要求有一个安全的通道,例如 SSH,并且在整个 SFTP 会话过程中能够识别客户端的身份。

Spring Integration 通过提供三个客户端端点支持通过 SFTP 发送和接收文件:入站通道适配器、出站通道适配器和出站网关。它还提供了方便的命名空间配置来定义这些客户端组件。

备注

从 6.0 版本开始,过时的 JCraft JSch 客户端已被替换为现代的 Apache MINA SSHD 框架。这在框架组件中引发了许多不兼容的更改。然而,在大多数情况下,这种迁移隐藏在 Spring Integration API 后面。变化最大的是 DefaultSftpSessionFactory,它现在基于 org.apache.sshd.client.SshClient 并暴露了其中的一些配置属性。

你需要将这个依赖项添加到你的项目中:

<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-sftp</artifactId>
<version>6.4.2</version>
</dependency>
xml

要将 SFTP 命名空间包含在您的 xml 配置中,在根元素上包含以下属性:

xmlns:int-sftp="http://www.springframework.org/schema/integration/sftp"
xsi:schemaLocation="http://www.springframework.org/schema/integration/sftp
https://www.springframework.org/schema/integration/sftp/spring-integration-sftp.xsd"
xml

部分总结

📄️ SFTP 会话缓存

在 3.0 之前版本中,默认情况下会自动缓存会话。提供了一个 cache-sessions 属性用于禁用自动缓存,但该方案不支持配置其他会话缓存属性。例如,你无法限制创建的会话数量。为了支持这一需求以及其他配置选项,我们添加了 CachingSessionFactory。它提供了 sessionCacheSize 和 sessionWaitTimeout 属性。顾名思义,sessionCacheSize 属性控制工厂在其缓存中维护的活动会话数量(默认是无限制的)。如果达到了 sessionCacheSize 阈值,任何尝试获取另一个会话的操作都将被阻塞,直到缓存中的某个会话可用或会话等待时间到期(默认等待时间是 Integer.MAX\_VALUE)。sessionWaitTimeout 属性允许配置等待时间。

📄️ SFTP 流式传输入站通道适配器

Version 4.3 引入了流式入境通道适配器。此适配器生成有效负载类型为 InputStream 的消息,让您可以在不写入本地文件系统的情况下获取文件。由于会话保持打开状态,消费应用程序在文件被消费后负责关闭会话。会话在 closeableResource 头(IntegrationMessageHeaderAccessor.CLOSEABLE\_RESOURCE)中提供。标准框架组件,如 FileSplitter 和 StreamTransformer,会自动关闭会话。有关这些组件的更多信息,请参阅文件拆分器和流转换器。以下示例展示了如何配置 SFTP 流式入境通道适配器: