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>

上述範例顯示了使用 sessionCacheSize 設定為 10sessionWaitTimeout 設定為一秒 (其值以毫秒為單位) 建立的 CachingSessionFactory

從 Spring Integration 3.0 開始,CachingConnectionFactory 提供了 resetCache() 方法。當調用時,所有閒置的工作階段都會立即關閉,而使用中的工作階段會在返回快取時關閉。新的工作階段請求會根據需要建立新的工作階段。

從 5.1 版開始,CachingSessionFactory 有一個新的屬性 testSession。如果為 true,則將透過發送 NOOP 命令來測試工作階段,以確保其仍然處於活動狀態;如果不是,則會從快取中移除;如果快取中沒有活動工作階段,則會建立新的工作階段。