2016-12-01 6 views
1

Spring Integration SFTPインバウンドアダプタが実行時に異なるfilename-regexをサポートするかどうかを知る。私は、インバウンドアダプタの設定で設定した自動起動=「true」を持っているspring SFTP varying filename-regex

"^(foo_|bar_)" + new java.text.SimpleDateFormat("yyyyMMdd"). format(new java.util.Date()) +".txt$"よう

ファイル名の正規表現を検索します。

私のテストケースでは、固定レート= "1000" time-unit = "MILLISECONDS"のポーラーで、その日の正しいファイルをローカルディレクトリにコピーします。しかし、システムの日付をポーリングしている間に変更すると、新しい日付のファイルが取得されません。テストを再実行すると動作します。

私は理解する必要があります。それはJUnitから実行されているためではありませんか?

答えて

1

SftpRegexPatternFileListFilterをサブクラス化し、それぞれの呼び出しでパターンをaccept - setPatternreturn super.accept(file)に更新できます。

日付の変更を検出したときにのみ新しいパターンをコンパイルするように最適化することができます。

+0

このソリューションが機能します。ありがとう! –

1

filename-regexオプションは実行時にSftpRegexPatternFileListFilterオブジェクトになります。

SpEL用に設計されたものではありません。通常はpatternです。

解決策の1つは、独自のFileListFilterを動的パターンのコンパイルで実装することです。

もう1つの解決策は、ポーリングレートに縛られる必要がある場合は、いくつかのポーラーのアドバイスから、SftpRegexPatternFileListFilter.setPattern()を使用することです。あなたが唯一のnew Date()に頼っているように見えるので、最初の解決策も動作しますが、。

しかし、「システムの日付を変更する」ことはお勧めできません。すべての日付ベースのコンポーネントが状態を再計算することを願っています。私はシステムの日付を変更した後にアプリケーションを再起動するほうがよいという非常に重要な操作だと思います。

+0

彼は自分の解決策をテストするためだけに日付を変更していると思います。 –

+0

そうです。私のリアルタイムシナリオはほぼ同じですが、テスト用です。日付がEODを変更すると、ポーラーは次の日付を取得する必要があります。私は解決策を提示し、あなたの投稿を続けます。みんなありがとう。これは役に立ちます。 –

関連する問題