SFTP 會話快取
從 Spring Integration 3.0 版本開始,會話預設不再快取。cache-sessions 屬性在端點上不再支援。如果您希望快取會話,必須使用 CachingSessionFactory (參見下一個示例)。 |
在 3.0 版本之前,會話預設會自動快取。提供了 cache-sessions
屬性用於停用自動快取,但該解決方案無法配置其他會話快取屬性。例如,您無法限制建立的會話數量。為了支援此需求及其他配置選項,我們添加了 CachingSessionFactory
。它提供了 sessionCacheSize
和 sessionWaitTimeout
屬性。顧名思義,sessionCacheSize
屬性控制工廠在其快取中維護的活動會話數量(預設為無限制)。如果達到 sessionCacheSize
閾值,任何獲取另一個會話的嘗試都將阻塞,直到快取中的某個會話可用,或者直到會話的等待時間到期(預設等待時間為 Integer.MAX_VALUE
)。sessionWaitTimeout
屬性用於配置等待時間。
如果您希望快取會話,請配置預設的 Session 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
命令來測試其是否仍然活動;如果不是,則會話將從快取中移除;如果快取中沒有活動會話,則會建立一個新會話。