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 命令來測試會話,以確保其仍然活動;如果不是,則會從快取中移除;如果快取中沒有活動會話,則會建立一個新會話。