SFTP 工作階段快取
從 Spring Integration 3.0 版開始,工作階段預設不再快取。端點不再支援 cache-sessions 屬性。如果您想要快取工作階段,則必須使用 CachingSessionFactory (請參閱下一個範例)。 |
在 3.0 版之前的版本中,工作階段預設會自動快取。cache-sessions
屬性可用於停用自動快取,但該解決方案無法提供設定其他工作階段快取屬性的方法。例如,您無法限制建立的工作階段數量。為了支援該需求和其他設定選項,我們新增了 CachingSessionFactory
。它提供 sessionCacheSize
和 sessionWaitTimeout
屬性。顧名思義,sessionCacheSize
屬性控制 factory 在其快取中維護的活動工作階段數量(預設為無限制)。如果已達到 sessionCacheSize
閾值,則任何嘗試取得另一個工作階段的動作都會遭到封鎖,直到快取的工作階段之一變成可用,或直到工作階段的等待時間逾時(預設等待時間為 Integer.MAX_VALUE
)。sessionWaitTimeout
屬性可設定等待時間。
如果您想要快取工作階段,請設定您的預設工作階段 factory(如先前所述),然後將其包裝在 CachingSessionFactory
的執行個體中,您可以在其中提供這些額外屬性。以下範例示範如何執行此操作
<bean id="sftpSessionFactory"
class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<property name="host" value="localhost"/>
</bean>
<bean id="cachingSessionFactory"
class="org.springframework.integration.file.remote.session.CachingSessionFactory">
<constructor-arg ref="sftpSessionFactory"/>
<constructor-arg value="10"/>
<property name="sessionWaitTimeout" value="1000"/>
</bean>
上述範例建立了一個 CachingSessionFactory
,其 sessionCacheSize
設定為 10
,而 sessionWaitTimeout
設定為一秒(1000 毫秒)。
從 Spring Integration 3.0 版開始,CachingConnectionFactory
提供了 resetCache()
方法。呼叫時,所有閒置工作階段都會立即關閉,而使用中的工作階段會在傳回快取時關閉。當使用 isSharedSession=true
時,通道會關閉,且共用工作階段僅在最後一個通道關閉時才會關閉。新的工作階段請求會在必要時建立新的工作階段。
從 5.1 版開始,CachingSessionFactory
有一個新的屬性 testSession
。當為 true 時,工作階段將透過執行空路徑的 REALPATH
命令來測試以確保其仍然處於活動狀態;如果不是,則會從快取中移除;如果快取中沒有活動工作階段,則會建立新的工作階段。