FTP 会话缓存

从 Spring Integration 3.0 开始,会话默认不再缓存。cache-sessions 属性在端点上不再受支持。如果您希望缓存会话,则必须使用 CachingSessionFactory(如下一个示例所示)。

在 3.0 之前的版本中,会话默认自动缓存。提供了 cache-sessions 属性来禁用自动缓存,但该解决方案无法配置其他会话缓存属性。例如,您无法限制创建的会话数量。为了支持此要求和其他配置选项,添加了 CachingSessionFactory。它提供了 sessionCacheSizesessionWaitTimeout 属性。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 设置为 10sessionWaitTimeout 设置为一秒(其值以毫秒为单位)。

从 Spring Integration 3.0 开始,CachingConnectionFactory 提供了一个 resetCache() 方法。调用后,所有空闲会话立即关闭,正在使用的会话在返回到缓存时关闭。如有必要,对会话的新请求会建立新会话。

从 5.1 版本开始,CachingSessionFactory 有一个新属性 testSession。当为 true 时,会话将通过发送 NOOP 命令进行测试,以确保它仍然处于活动状态;如果不是,它将从缓存中移除;如果缓存中没有活动会话,则会创建一个新会话。

© . This site is unofficial and not affiliated with VMware.