SFTP 会话缓存

从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设置为10,其sessionWaitTimeout设置为一秒(1000毫秒)。

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

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