FTP Session Caching
从 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 命令来经过测试,以确保它依然活跃;如果不活跃,它会从缓存中移除;如果没有活跃会话存在于缓存中,将会创建一个新会话。