跳到主要内容
版本:7.0.2

SFTP 适配器

DeepSeek V3 中英对照 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>7.0.2</version>
</dependency>

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

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"

章节总结

📄️ SFTP 会话缓存

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

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

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