跳到主要内容
版本:7.0.2

SFTP 会话缓存

DeepSeek V3 中英对照 SFTP Session Caching

important

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

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

若希望会话被缓存,请配置默认的会话工厂(如先前所述),然后将其包装在 CachingSessionFactory 实例中,您可以在其中提供这些附加属性。以下示例展示了如何操作:

<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 设置为 10sessionWaitTimeout 设置为 1 秒(1000 毫秒)。

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

从 5.1 版本开始,CachingSessionFactory 新增了一个属性 testSession。当设置为 true 时,将通过执行一个针对空路径的 REALPATH 命令来测试会话是否仍处于活动状态;如果会话已失效,则会将其从缓存中移除;如果缓存中没有活动会话,则会创建一个新的会话。