SFTP セッションキャッシング
Spring Integration バージョン 3.0 以降、セッションはデフォルトでキャッシュされなくなりました。cache-sessions 属性はエンドポイントでサポートされなくなりました。セッションをキャッシュする場合は、CachingSessionFactory を使用する必要があります(次の例を参照)。 |
3.0 より前のバージョンでは、セッションはデフォルトで自動的にキャッシュされていました。cache-sessions
属性は自動キャッシュを無効にするために使用できましたが、そのソリューションは他のセッションキャッシュ属性を構成する方法を提供していませんでした。例: 作成されるセッションの数を制限できませんでした。その要件と他の構成オプションをサポートするために、CachingSessionFactory
を追加しました。sessionCacheSize
および sessionWaitTimeout
プロパティを提供します。その名前が示すように、sessionCacheSize
プロパティは、ファクトリがキャッシュに保持するアクティブセッションの数を制御します(デフォルトは無制限です)。sessionCacheSize
しきい値に達した場合、キャッシュされたセッションのいずれかが使用可能になるか、セッションの待機時間が経過するまで(デフォルトの待機時間は Integer.MAX_VALUE
)、別のセッションを取得しようとするとブロックされます。sessionWaitTimeout
プロパティにより、待機時間の構成が可能になります。
セッションをキャッシュしたい場合は、( 前述のとおり) デフォルトのセッションファクトリを構成し、追加のプロパティを提供できる 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>
上記の例では、sessionCacheSize
を 10
に設定し、sessionWaitTimeout
を 1 秒(1000 ミリ秒)に設定して CachingSessionFactory
を作成します。
Spring Integration バージョン 3.0 から、CachingConnectionFactory
は resetCache()
メソッドを提供します。呼び出されると、すべてのアイドルセッションはすぐに閉じられ、使用中のセッションはキャッシュに返されると閉じられます。isSharedSession=true
を使用すると、チャネルが閉じられ、共有セッションは最後のチャネルが閉じられたときにのみ閉じられます。セッションの新しいリクエストは、必要に応じて新しいセッションを確立します。
バージョン 5.1 以降、CachingSessionFactory
には新しいプロパティ testSession
があります。true の場合、空のパスに対して REALPATH
コマンドを実行してセッションがテストされ、それがまだアクティブであることを確認します。そうでない場合は、キャッシュから削除されます。アクティブなセッションがキャッシュにない場合は、新しいセッションが作成されます。