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 コマンドを実行してセッションがテストされ、それがまだアクティブであることを確認します。そうでない場合は、キャッシュから削除されます。アクティブなセッションがキャッシュにない場合は、新しいセッションが作成されます。