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 命令进行测试以确保其仍然处于活动状态;如果不是,则将其从缓存中删除;如果缓存中没有活动会话,则会创建一个新会话。