SFTP 会话缓存
从 Spring Integration 3.0 版本开始,会话默认不再缓存。
cache-sessions
属性不再受端点支持。
如果您希望缓存会话,则必须使用 CachingSessionFactory
(请参阅下一个示例)。
在 3.0 之前的版本中,会话默认自动缓存。
cache-sessions
属性可用于禁用自动缓存,但该解决方案无法配置其他会话缓存属性。
例如,您无法限制创建的会话数量。
为了支持该要求和其他配置选项,我们添加了 CachingSessionFactory
。
它提供了 sessionCacheSize
和 sessionWaitTimeout
属性。
顾名思义,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
命令来测试会话,以确保它仍然处于活动状态;如果不是,则会将其从缓存中删除;如果缓存中没有活动会话,则会创建一个新会话。