このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Integration 6.4.3 を使用してください!

RemoteFileTemplate を使用する

Spring Integration 3.0 から、FtpSession オブジェクトに対して新しい抽象化が提供されます。テンプレートは、ファイルを送信、取得 ( InputStream として)、削除、名前変更するメソッドを提供します。さらに、呼び出し元がセッションで複数の操作を実行できるようにする execute メソッドが提供されます。いずれの場合も、テンプレートは確実にセッションを閉じます。詳細については、RemoteFileTemplate の Javadoc を参照してください。FTP のサブクラス FtpRemoteFileTemplate があります。

バージョン 4.1 では、基盤となる FTPClient へのアクセスを提供する getClientInstance() を含む追加のメソッドが追加されたため、低レベル API へのアクセスが可能になります。

すべての FTP サーバーが STAT <path> コマンドを適切に実装しているわけではありません。存在しないパスに対して肯定的な結果を返すものもあります。パスがファイルで、存在する場合、NLST コマンドは確実に名前を返します。ただし、パスがディレクトリの場合、NLST は常に空のリストを返すため、これは空のディレクトリが存在することの確認をサポートしません。テンプレートはパスがディレクトリを表しているかどうかわからないため、パスが存在しないように見える場合 ( NLST を使用している場合) は、追加のチェックを実行する必要があります。これによりオーバーヘッドが追加され、サーバーへのいくつかのリクエストが必要になります。バージョン 4.1.9 以降、FtpRemoteFileTemplate は FtpRemoteFileTemplate.ExistsMode プロパティを提供します。これには次のオプションがあります。

  • STATSTAT FTP コマンド(FTPClient.getStatus(path))を実行して、パスの存在を確認します。これはデフォルトであり、FTP サーバーが STAT コマンド(パス付き)を適切にサポートする必要があります。

  • NLSTNLST FTP コマンド— FTPClient.listName(path) を実行します。ファイルへのフルパスであるパスをテストする場合に使用します。空のディレクトリでは機能しません。

  • NLST_AND_DIRS: 最初に NLST コマンドを実行し、ファイルが返されない場合は、FTPClient.changeWorkingDirectory(path) を使用して一時的に作業ディレクトリを切り替える手法にフォールバックします。詳細については、FtpSession.exists() (Javadoc) を参照してください。

FileExistsMode.FAIL の場合は常にファイル(ディレクトリではなく)のみを検索することがわかっているため、FtpMessageHandler および FtpOutboundGateway コンポーネントには NLST モードを安全に使用します。

その他の場合は、FtpRemoteFileTemplate を継承して、オーバーライドされた exist() メソッドでカスタムロジックを実装できます。

バージョン 5.0 から、新しい RemoteFileOperations.invoke(OperationsCallback<F, T> action) メソッドが利用可能になりました。このメソッドを使用すると、複数の RemoteFileOperations 呼び出しを、同じスレッド限定の Session のスコープ内で呼び出すことができます。これは、RemoteFileTemplate の複数の高レベル操作を 1 つの作業単位として実行する必要がある場合に役立ちます。例: AbstractRemoteFileOutboundGateway は mput コマンドの実装でそれを使用し、提供されたディレクトリ内の各ファイルに対して、およびそのサブディレクトリに対して再帰的に put 操作を実行します。詳細については、Javadoc を参照してください。