このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、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
プロパティを提供します。これには次のオプションがあります。
STAT
:STAT
FTP コマンド(FTPClient.getStatus(path)
)を実行して、パスの存在を確認します。これはデフォルトであり、FTP サーバーがSTAT
コマンド(パス付き)を適切にサポートする必要があります。NLST
:NLST
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 を参照してください。