public class FileReadingMessageSource extends AbstractMessageSource<FileSE> implements ManageableLifecycle
MessageSource。特定のファイルのメッセージを防ぐために、FileListFilter を指定できます。デフォルトでは、XML または DSL で構成する場合、AcceptOnceFileListFilter が使用されます。これにより、ファイルがディレクトリから 1 回だけ取得されるようになります。 ファイルの読み取りに関する一般的な問題は、準備が整う前にファイルが検出される可能性があることです。デフォルトの AcceptOnceFileListFilter はこれを防ぎません。ほとんどの場合、ファイル書き込みプロセスが読み取りの準備ができたらすぐに各ファイルの名前を変更すると、これを防ぐことができます。デフォルトの AcceptOnceFileListFilter で構成された、準備ができている(たとえば、既知のサフィックスに基づく)ファイルのみを受け入れるパターンマッチングフィルターを使用すると、これが可能になります。
外部 DirectoryScanner を使用する場合は、FileReadingMessageSource のインスタンスではなく、FileLocker および FileListFilter オブジェクトを外部 DirectoryScanner に設定する必要があります。それ以外の場合は、IllegalStateExceptionSE が発生します。
ComparatorSE を使用して、PriorityBlockingQueueSE 内のファイルの内部順序を確認できます。これは ResequencingMessageGroupProcessor と同じ保証を提供しませんが、ファイルの書き込みとダウンストリームの失敗がまれな場合はそれで十分かもしれません。
FileReadingMessageSource は、receive() の同時呼び出しとメッセージ配信コールバックで完全にスレッドセーフです。
| 修飾子と型 | クラスと説明 |
|---|---|
static class | FileReadingMessageSource.WatchEventType |
IntegrationManagement.ManagementOverridesEXPRESSION_PARSER, loggerMETER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAME| コンストラクターと説明 |
|---|
FileReadingMessageSource() 無制限の容量の自然に順序付けられたキューを使用して FileReadingMessageSource を作成します。 |
FileReadingMessageSource(ComparatorSE<FileSE> receptionOrderComparator) 渡された ComparatorSE で順序付けられた PriorityBlockingQueueSE を使用して FileReadingMessageSource を作成します。 |
FileReadingMessageSource(int internalQueueCapacity) 指定された容量の制限付きキューを使用して FileReadingMessageSource を作成します。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
protected AbstractIntegrationMessageBuilder<FileSE> | doReceive() サブクラスはこのメソッドを実装する必要があります。 |
StringSE | getComponentType() |
DirectoryScanner | getScanner() |
boolean | isRunning() |
boolean | isUseWatchService() |
void | onFailure(Message<FileSE> failedMessage) 余裕がある場合は、失敗したメッセージを "toBeReceived" キューに追加し直します。 |
protected void | onInit() |
void | setAutoCreateDirectory(boolean autoCreateDirectory) 初期化時にソースディレクトリがまだ存在しない場合に、ソースディレクトリを自動的に作成するかどうかを指定します。 |
void | setDirectory(FileSE directory) 入力ディレクトリを指定します。 |
void | setFilter(FileListFilter<FileSE> filter)FileListFilter を設定します。 |
void | setLocker(FileLocker locker) オプション。 |
void | setScanEachPoll(boolean scanEachPoll) オプション。 |
void | setScanner(DirectoryScanner scanner) オプションで、 WatchServiceDirectoryScanner などのカスタムスキャナーを指定します |
void | setUseWatchService(boolean useWatchService) この FileReadingMessageSource を切り替えて、内部 FileReadingMessageSource.WatchServiceDirectoryScanner を使用します。 |
void | setWatchEvents(FileReadingMessageSource.WatchEventType... watchEvents)WatchServiceSE イベント型。 |
void | start() |
void | stop() |
buildMessage, destroy, getBeanName, getComponentName, getManagedName, getManagedType, getOverrides, isLoggingEnabled, receive, registerMetricsCaptor, setBeanName, setHeaderExpressions, setLoggingEnabled, setManagedName, setManagedTypeafterPropertiesSet, evaluateExpression, evaluateExpression, evaluateExpression, evaluateExpression, evaluateExpression, evaluateExpression, evaluateExpression, getBeanFactory, getEvaluationContext, getEvaluationContext, getMessageBuilderFactory, setBeanFactory, setConversionServicecloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEgetIntegrationPatternTypegetThisAspublic FileReadingMessageSource()
public FileReadingMessageSource(int internalQueueCapacity)
internalQueueCapacity - 内部的に受信するファイルをキャッシュするために使用されるキューのサイズ。このキューは、ディレクトリスキャンを最適化するために大きくすることができます。scanEachPoll を false に設定し、キューのサイズを大きくすると、新しいディレクトリリストが実行される前に、キューは一度いっぱいになり、その後完全に空になります。これは、ディレクトリ内の多数のファイルのスキャンを減らすのに特に役立ちます。public FileReadingMessageSource(@Nullable ComparatorSE<FileSE> receptionOrderComparator)
ComparatorSE で順序付けられた PriorityBlockingQueueSE を使用して FileReadingMessageSource を作成します。使用するキューのサイズは、すべてのファイルを並べ替えるために、入力ディレクトリ内のすべてのファイルを保持するのに十分な大きさである必要があります。キューのサイズを制限することは、順序付けと相互に排他的です。同時アクセスでは、ファイル配信のオーダーについて保証することはできません。
receptionOrderComparator - 内部キュー内のファイルを順序付けるために使用されるコンパレータ public void setDirectory(FileSE directory)
directory - 監視するために public void setScanner(DirectoryScanner scanner)
WatchServiceDirectoryScanner などのカスタムスキャナーを指定します scanner - スキャナーの実装 public DirectoryScanner getScanner()
FileReadingMessageSource の DirectoryScanner。public void setAutoCreateDirectory(boolean autoCreateDirectory)
autoCreateDirectory - このコンポーネントの起動時に、監視対象のディレクトリを作成する必要がありますか? public void setFilter(FileListFilter<FileSE> filter)
FileListFilter を設定します。デフォルトでは、境界のない AcceptOnceFileListFilter が使用されます。ほとんどの場合、変更や重複の関心事に対処するために、カスタマイズされた FileListFilter が必要になります。複数のフィルターが必要な場合は、CompositeFileListFilter を使用してグループ化できます。付属のフィルターはスレッドセーフである必要があります。
filter - フィルター public void setLocker(FileLocker locker)
FileLocker を設定します。付属の FileLocker はスレッドセーフである必要があります
locker - ロッカー public void setScanEachPoll(boolean scanEachPoll)
デフォルトでは、この実装はディレクトリを再度確認する前にキューを空にします。順序が関係する場合は、このフラグを設定した場合の影響を考慮することが重要です。このフラグが false に設定されている場合、このクラスが保持している内部 BlockingQueueSE はファイルシステムと同期していない可能性が高くなりますが、true に設定されている場合は、より頻繁に変更されます(高負荷な並べ替えが発生します)。
scanEachPoll - コンポーネントを再スキャンする必要があるかどうか (バックログ全体が配信されるまで再スキャンしないのとは対照的に)public void setUseWatchService(boolean useWatchService)
FileReadingMessageSource を切り替えて、内部 FileReadingMessageSource.WatchServiceDirectoryScanner を使用します。useWatchService - true で FileReadingMessageSource.WatchServiceDirectoryScanner に切り替える boolean フラグ。setWatchEvents(org.springframework.integration.file.FileReadingMessageSource.WatchEventType...)public boolean isUseWatchService()
public void setWatchEvents(FileReadingMessageSource.WatchEventType... watchEvents)
watchEvents - FileReadingMessageSource.WatchEventType のセット。setUseWatchService(boolean)public StringSE getComponentType()
NamedComponent の getComponentType public void start()
Lifecycle の start ManageableLifecycle の start public void stop()
Lifecycle の stop ManageableLifecycle の stop public boolean isRunning()
Lifecycle の isRunning ManageableLifecycle の isRunning protected void onInit()
AbstractExpressionEvaluator の onInit protected AbstractIntegrationMessageBuilder<FileSE> doReceive()
AbstractMessageSourcepayload ですが、戻り値はペイロードが T 型の Message インスタンスでもかまいません。追加のヘッダーの作成に使用される AbstractIntegrationMessageBuilder にすることもできます。AbstractMessageSource<FileSE> の doReceive