跳到主要内容

FTP 会话缓存

QWen Plus 中英对照 FTP Session Caching

important

从 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>
xml

前面的示例展示了使用 sessionCacheSize 设置为 10 和 sessionWaitTimeout 设置为 1 秒(它的值是以毫秒为单位)创建的 CachingSessionFactory

从 Spring Integration 3.0 开始,CachingConnectionFactory 提供了一个 resetCache() 方法。当调用此方法时,所有空闲会话将立即关闭,并且在使用中的会话将在返回缓存时关闭。新的会话请求将根据需要建立新的会话。

从 5.1 版本开始,CachingSessionFactory 有一个新的属性 testSession。当设置为 true 时,会通过发送一个 NOOP 命令来测试会话是否仍然有效;如果无效,则会将其从缓存中移除;如果没有活跃的会话在缓存中,则会创建一个新的会话。