如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

SFTP 会话缓存

从 Spring Integration 3.0 版本开始,会话默认不再被缓存。 端点上的 cache-sessions 属性不再受支持。 如果您希望缓存会话,则必须使用 CachingSessionFactory(请参见下一个示例)。

在 3.0 之前的版本中,会话默认会自动缓存。 提供了一个 cache-sessions 属性用于禁用自动缓存,但该方案无法配置其他会话缓存属性。 例如,您无法限制创建的会话数量。 为了支持该需求及其他配置选项,我们添加了 CachingSessionFactory。 它提供了 sessionCacheSizesessionWaitTimeout 属性。 顾名思义,sessionCacheSize 属性控制工厂在其缓存中维护的活跃会话数量(默认为无限制)。 如果已达到 sessionCacheSize 阈值,任何尝试获取新会话的请求都将阻塞,直到其中一个缓存中的会话变为可用,或者等待会话的时间过期(默认等待时间为 Integer.MAX_VALUE)。 sessionWaitTimeout 属性用于配置等待时间。spring-doc.cadn.net.cn

如果您希望缓存您的会话,请配置您的默认会话工厂(如 前文所述),然后将其包装在 CachingSessionFactory 的实例中,您可以在其中提供这些额外属性。 以下示例展示了如何实现:spring-doc.cadn.net.cn

<bean id="sftpSessionFactory"
    class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
    <property name="host" value="localhost"/>
</bean>

<bean id="cachingSessionFactory"
    class="org.springframework.integration.file.remote.session.CachingSessionFactory">
    <constructor-arg ref="sftpSessionFactory"/>
    <constructor-arg value="10"/>
    <property name="sessionWaitTimeout" value="1000"/>
</bean>

上述示例创建了一个CachingSessionFactory,其sessionCacheSize设置为10,其sessionWaitTimeout设置为一秒(1000毫秒)。spring-doc.cadn.net.cn

从 Spring Integration 3.0 版本开始,CachingConnectionFactory 提供了一种 resetCache() 方法。 当该方法被调用时,所有空闲会话将立即关闭,正在使用的会话将在其返回到缓存时关闭。 使用 isSharedSession=true 时,通道被关闭,共享会话仅在最后一个通道关闭时才被关闭。 新的会话请求会根据需要建立新会话。spring-doc.cadn.net.cn

从版本 5.1 开始,CachingSessionFactory 新增了一个属性 testSession。 当该属性为 true 时,系统将通过执行一个针对空路径的 REALPATH 命令来测试会话是否仍然活跃;如果会话已失效,则将其从缓存中移除;若缓存中没有活跃的会话,则会创建一个新的会话。spring-doc.cadn.net.cn