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
命令来测试会话,以确保它仍然有效;如果无效,则会将其从缓存中移除;如果没有活跃的会话在缓存中,则会创建一个新的会话。