FTP 会话缓存
从 Spring Integration 3.0 开始,会话默认不再被缓存。端点不再支持 cache-sessions 属性。如果您希望缓存会话,必须使用 CachingSessionFactory (如下例所示)。 |
在 3.0 版本之前,会话默认会自动缓存。提供了 cache-sessions
属性来禁用自动缓存,但该解决方案无法配置其他会话缓存属性。例如,您无法限制创建的会话数量。为了支持这一需求和其他配置选项,新增了 CachingSessionFactory
。它提供了 sessionCacheSize
和 sessionWaitTimeout
属性。sessionCacheSize
属性控制工厂在其缓存中维护的活动会话数量(默认为无限制)。如果达到 sessionCacheSize
阈值,任何获取另一个会话的尝试都会阻塞,直到某个缓存会话可用或会话的等待时间到期(默认等待时间为 Integer.MAX_VALUE
)。sessionWaitTimeout
属性配置该值。
如果您希望缓存会话,请按照前面描述配置您的默认会话工厂,然后将其包装在 CachingSessionFactory
实例中,您可以在其中提供这些附加属性。以下示例展示了如何操作
<bean id="ftpSessionFactory" class="o.s.i.ftp.session.DefaultFtpSessionFactory">
<property name="host" value="localhost"/>
</bean>
<bean id="cachingSessionFactory" class="o.s.i.file.remote.session.CachingSessionFactory">
<constructor-arg ref="ftpSessionFactory"/>
<constructor-arg value="10"/>
<property name="sessionWaitTimeout" value="1000"/>
</bean>
前例展示了一个 CachingSessionFactory
,其 sessionCacheSize
设置为 10
,sessionWaitTimeout
设置为一秒(其值以毫秒为单位)。
从 Spring Integration 3.0 开始,CachingConnectionFactory
提供了 resetCache()
方法。调用该方法时,所有空闲会话会立即关闭,正在使用的会话在返回缓存时关闭。会话的新请求会在必要时建立新会话。
从 5.1 版本开始,CachingSessionFactory
有一个新属性 testSession
。当设置为 true 时,将通过发送 NOOP 命令来测试会话,以确保其仍然活动;如果不是,则会从缓存中移除;如果缓存中没有活动会话,则会创建一个新会话。