|
如需使用最新稳定版本,请使用 Spring Integration 7.0.4! |
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 命令进行测试,以确保其仍处于活动状态;如果会话已失效,则将其从缓存中移除;若缓存中没有活动的会话,则会创建一个新的会话。