Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第49章 File2
File Component: Apache Camel 2.0 以降 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
File コンポーネントはファイルシステムへのアクセスを提供します。これにより、他の Apache Camel コンポーネントや 、 他のコンポーネントからのメッセージをディスクに保存できます。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
file:directoryName[?options]
file:directoryName[?options]
または
file://directoryName[?options]
file://directoryName[?options]
directoryName は基礎となるファイルディレクトリーを表します。
URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
注記
Apache Camel は、開始ディレクトリーで設定されたエンドポイントのみをサポートします。そのため、directoryName はディレクトリーである必要があります。1 つのファイルのみを使用する場合は、fileName オプションを使用できます(例:
fileName=thefilename
)。また、開始ディレクトリーには ${ } プレースホルダーの動的式を含めることはできません。ここでも、fileName
オプションを使用してファイル名の動的部分を指定します。
別のアプリケーションによって現在書き込まれているファイルの読み取りを回避する
JDK File IO API は、別のアプリケーションが現在ファイルを書き込み/コピーしているかどうかの検出に少し制限されていることに注意してください。実装は、OS プラットフォームによっても異なる場合があります。これにより、Apache Camel が別のプロセスでロックされていないと判断し、消費を開始する可能性があります。したがって、お使いの環境に応じて独自の調査を行う必要があります。これを支援するために、Apache Camel はさまざまな
readLock
オプションと、使用できる doneFileName
オプションを提供します。「他のファイルを直接ドロップするフォルダーからのファイルの使用」 のセクションも参照してください。
Camel on EAP デプロイメント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください。
URI オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
autoCreate
|
true
|
ファイルのパス名に不足しているディレクトリーを自動的に作成します。ファイルコンシューマーの場合は、開始ディレクトリーを作成することを意味します。ファイルプロデューサーの場合は、ファイルが書き込まれるディレクトリーを意味します。 |
bufferSize
|
128kb | 書き込みバッファーのサイズ (バイト単位)。 |
fileName
|
null
|
File Language などの式 を使用して、ファイル名を動的に設定します。コンシューマーの場合は、ファイル名フィルターとして使用されます。プロデューサーの場合、書き込むファイル名を評価するために使用されます。式が設定されている場合、CamelFileName ヘッダーよりも優先されます。(注: ヘッダー自体も Expressionにすることができます)。式オプションは String 型と Expression タイプの両方をサポートします。式が String タイプである場合、これは 常に File Language を使用して評価されます。式が Expression タイプである場合、指定された Expression タイプが使用されます。これにより、たとえば OGNL 式を使用できます。コンシューマーの場合、これを使用してファイル名をフィルターリングできるため、たとえば、ファイル 言語 構文 mydata-${date:now:yyyyMMdd}.txt を使用して現在のファイルを使用できます。Camel 2.11 以降では、プロデューサーは既存の CamelFileName ヘッダーよりも優先される CamelOverruleFileName ヘッダーをサポートします。CamelOverruleFileName は一度だけ使用されるヘッダーであり、CamelFileName の一時的な保存を回避し、後で復元する必要があるため、簡単になります。
|
フラット化
|
false
|
flatten は、ファイル名パスをフラット化して先頭のパスを削除するため、ファイル名のみになります。これにより、サブディレクトリーに再帰的に使用できますが、たとえばファイルを別のディレクトリーに書き込む場合、ファイルは単一のディレクトリーに書き込まれます。これをプロデューサーで true に設定すると、CamelFileName ヘッダーで認識されたファイル名はすべて先頭パスから取り除かれます。
|
charset
|
null
|
Camel 2.5: このオプションはファイルのエンコーディングを指定するために使用されます。camel は Exchange.CHARSET_NAME で Exchange プロパティーをこのオプションの値に設定します。 |
copyAndDeleteOnRenameFail
|
true
|
Camel 2.9: ファイルを直接変更できなかった場合に、フォールバックしてファイルのコピーと削除を行うかどうか。このオプションは FTP コンポーネントでは使用できません。 |
renameUsingCopy
|
false
|
Camel 2.13.1: コピーおよび削除ストラテジーを使用して名前変更操作を実行します。これは主に、通常の名前変更操作が信頼できない環境で使用されます (たとえば、異なるファイルシステムまたはネットワーク間)。このオプションは、
copyAndDeleteOnRenameFail パラメーターよりも優先されますが、これは追加の遅延後にのみ自動的にコピーおよび削除ストラテジーにフォールバックします。
|
コンシューマーのみ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
initialDelay
|
1000
|
ファイル/ディレクトリーの開始をポーリングするまでのミリ秒。 |
delay
|
500
|
次にファイル/ディレクトリーをポーリングするまでのミリ秒。 |
useFixedDelay
|
true
|
プール間の固定遅延を使用するには、true に設定します。それ以外の場合、固定レートが使用されます。詳細は、JDK の ScheduledExecutorService を参照してください。
|
runLoggingLevel
|
TRACE
|
Camel 2.8: コンシューマーはポーリング時に開始/完了のログ行をログに記録します。このオプションを使用すると、ログレベルを設定できます。 |
再帰
|
false
|
ディレクトリーの場合は、すべてのサブディレクトリー内のファイルも検索します。 |
delete
|
false
|
true の場合、ファイルは正常に処理されると削除されます。
|
noop
|
false
|
true の場合、ファイルは移動または削除されません。このオプションは、読み取り専用データまたは ETL タイプの要件に適しています。noop=true の場合、Apache Camel は idempotent=true も設定し、同じファイルを何度も消費しないようにします。
|
preMove
|
null
|
File Language などの式 を使用して、処理 前 に移動する際にファイル名を動的に設定します。たとえば、進行中のファイルを order ディレクトリーに移動するには、この値を order に設定します。
|
move
|
.camel
|
File Language などの式 を使用して、処理 後 に移動する際にファイル名を動的に設定します。ファイルを .done サブディレクトリーに移動するには、.done と入力します。
|
moveFailed
|
null
|
File Language などの式 を使用して、処理 後に失敗したファイルを移動する際にファイル 名を動的に設定します。ファイルを エラー サブディレクトリーに移動するには、error を実行します。注記: ファイルを別の場所に移動すると、ファイルを別の場所に移動するとエラーを 処理 できるため、Apache Camel はファイルを再度取得できません。
|
include
|
null
|
ファイル名が正規表現パターンに一致する場合にファイルを含めるために使用されます(照合は Camel 2.17 以降と大文字と小文字を区別し ます)。 |
exclude
|
null
|
ファイル名が正規表現パターンに一致する場合にファイルを除外するために使用されます(一致は Camel 2.17 以降と大文字と小文字を区別し ます)。 |
antInclude
|
null
|
Camel 2.10: Ant スタイルのフィルターが含まれます(例: antInclude=\* {}*/*{} .txt )。コンマ区切り形式で複数の組み込みを指定できます。ant パスフィルターの詳細は、「ANT パスマッチャーを使用したフィルターリング」 を参照してください。
|
antExclude
|
null
|
Camel 2.10: Ant style filter exclusion.antInclude と antExclude の両方を使用する場合は、antInclude よりも antExclude が優先されます。コンマ区切り形式で複数の除外を指定できます。ant パスフィルターの詳細は、「ANT パスマッチャーを使用したフィルターリング」 を参照してください。
|
antFilterCaseSensitive
|
true
|
Camel 2.11: 大文字/小文字を区別しない Ant スタイルのフィルター。 |
idempotent
|
false
|
Apache Camel がすでに処理されたファイルをスキップできるように、Idempotent Consumer EIP パターンを使用するオプション。デフォルトでは、1000 エントリーを保持するメモリーベースの LRUCache を使用します。noop=true の場合、同じファイルを何度も使用することを避けるために、べき等性も有効になります。
|
idempotentKey
|
式
|
Camel 2.11: カスタムのべき等キーを使用するには、以下を実行します。デフォルトでは、ファイルの絶対パスが使用されます。File Language を使用すると、ファイル名やファイルサイズを使用することができます(例: idempotentKey=$-$ )。 |
idempotentRepository
|
null
|
Pluggable repository as a org.apache.camel.processor.idempotent.MessageIdRepository class.指定がない場合はデフォルトで MemoryMessageIdRepository を使用し、べき等 性が true になります。
|
inProgressRepository
|
memory
|
org.apache.camel.processor.idempotent.MessageIdRepository クラスとしてのプラグ可能な in-progress リポジトリー。in-progress リポジトリーは、現在進行中のファイルが消費されていることを示すために使用されます。デフォルトでは、メモリーベースのリポジトリーが使用されます。 |
filter
|
null
|
org.apache.camel.component.file.GenericFileFilter クラスとしてのプラグ可能なフィルター。フィルターがその accept () メソッドで false を返す場合、ファイルをスキップします。Apache Camel には、camel-spring コンポーネントの ANT パスマッチャー フィルターも同梱されています。詳細は、以下のセクションを参照してください。
|
shuffle
|
false
|
Camel 2.16: ファイルのリストをシャッフルするには(ランダムな順序でのソート) |
sorter
|
null
|
java.util.Comparator<org.apache.camel.component.file.GenericFile > クラスとしてのプラグ可能なソーター。 |
sortBy
|
null
|
File 言語 を使用した組み込みソート。ネストされたソートをサポートしているため、ファイル名でのソートと、2 つ目のグループとして変更日でソートできます。詳細は、以下のソートセクションを参照してください。 |
readLock
|
none
|
ファイルに排他的な読み取りロックがある (つまり、ファイルが進行中または書き込み中ではない) 場合にのみファイルをポーリングするために、コンシューマーが使用します。Apache Camel は、ファイルロックが許可されるまで待機します。
readLock オプションは、以下の組み込みストラテジーをサポートします。
注記: 外部プログラムがファイルを書き込む場合は、Red Hat は
readLock オプションの代わりに doneFileName オプションを使用することを推奨します。
警告: 読み取りロックストラテジーのほとんどは、クラスターモードでの使用には適していません。つまり、同じディレクトリーで同じファイルを読み取ろうとしている複数のコンシューマーを含めることはできません。この場合、読み取りロックは確実に機能しません。Hazelcast コンポーネントから などのクラスター対応べき等リポジトリー実装を使用する場合、べき等読み取りロックは、クラスター化された信頼性をサポートします。
|
readLockTimeout
|
0 (FTP の場合は 2000 )
|
読み取りロックでサポートされている場合、読み取りロックのオプションのタイムアウト(ミリ秒単位)。読み取りロックを許可できず、タイムアウトがトリガーされた場合、Apache Camel はファイルをスキップします。Apache Camel が次にポーリングすると、がファイルを再度試行します。この場合、読み取りロックが許可される可能性があります。現在、fileLock 、changed 、および rename がタイムアウトに対応します。
|
readLockCheckInterval
|
1000 (FTP の場合、5000 )
|
Camel 2.6: 読み取りロックでサポートされている場合、読み取りロックの間隔(ミリ秒単位)。この間隔は、読み取りロックを取得する試行間のスリープに使用されます。たとえば、changed 読み取りロックを使用する場合は、低速な書き込み に対応するために間隔を長く設定できます。デフォルトの 1 秒。プロデューサーによるファイルの書き込みが非常に遅い場合は 短すぎる 可能性があります。
|
readLockMinLength
|
1
|
Camel 2.10.1: このオプションは、readLock=changed にのみ適用されます。このオプションを使用すると、最小ファイルの長さを設定できます。デフォルトで Camel はファイルにデータが含まれていると想定するため、デフォルト値は 1 です。このオプションをゼロに設定すると、長さがゼロのファイルを使用できます。
|
readLockLoggingLevel
|
WARN
|
Camel 2.12: 読み取りロックを取得できなかったときに使用されるログレベル。デフォルトでは、WARN がログに記録されます。このレベルを変更できます。たとえば、ログを記録しないように OFF に設定できます。このオプションは、changed、fileLock、rename タイプの readLock にのみ適用されます。 |
readLockMarkerFile
|
true
|
Camel 2.14: changed、rename、または exclusive 読み取りロックタイプでマーカーファイルを使用するかどうか。デフォルトでは、他のプロセスが同じファイルを取得するのを防ぐために、マーカーファイルも使用されます。このオプションを false に設定すると、この動作をオフにできます。たとえば、Camel アプリケーションによってマーカーファイルをファイルシステムに書き込みたくない場合などです。
|
readLockRemoveOnRollback
|
true
|
Camel 2.16: このオプションは、
readLock=idempotent にのみ適用されます。ファイル処理が失敗し、ロールバックが行われるときに、べき等性リポジトリーからファイル名エントリーを削除するかどうかを指定します。false の場合、ファイル名のエントリーが確認されます(ファイルがコミットしたかのように)。
|
readLockRemoveOnCommit
|
false
|
Camel 2.16: このオプションは、
readLock=idempotent にのみ適用されます。ファイル処理に成功し、コミットが行われるときに、べき等性リポジトリーからファイル名エントリーを削除するかどうかを指定します。デフォルトでは、エントリーは削除され ない ため、別のアクティブなノードがファイルを取得しようとすると競合状態が発生しなくなります。この場合、(競合状態のリスクが引き継がった後に) X 分後にファイル名エントリーがエビクトされるように、べき等リポジトリーでエビクションストラテジーを設定することが推奨されます。
|
readLockDeleteOrphanLockFiles
|
true
|
Camel 2.16: このオプションは、
readLock=markerFile にのみ適用されます。起動時に、孤立した読み取りロックファイルを削除するかどうかを指定します。このファイルは、Camel が適切にシャットダウンされなかった場合にファイルシステムに残っている可能性があります(JVM クラッシュ)。false の場合、孤立したロックファイルが Camel による対応するファイルの取得をブロックしなくなる可能性があります。
|
directoryMustExist
|
Camel 2.5:
startingDirectoryMustExist と似ていますが、これは再帰的なサブディレクトリーのポーリングに適用されます。
|
|
doneFileName
|
null
|
Camel 2.6: 提供されている場合、Camel は 完了 ファイルが存在する場合にのみファイルを消費します。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的プレースホルダーを使用することもできます。完了 ファイルは、常に元のファイルと同じフォルダーに 想定されます。例は、完了ファイルの使用と、実行ファイル の書き込みセクションを参照して ください。注記:外部プログラムがファイルを書き込む場合には、Red Hat は doneFileName オプションを使用することを推奨します。
|
exclusiveReadLockStrategy
|
null
|
org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy 実装としてのプラグ可能な読み取りロック。
|
maxMessagesPerPoll
|
0
|
ポーリングごとに収集するメッセージの最大数を定義する整数。デフォルトでは最大値は設定されていません。たとえば 1000 などの制限を設定して、サーバーが起動時に数千のファイルを読み込まないようにすることができます。無効にするには、0 または負の値を設定します。 |
eagerMaxMessagesPerPoll
|
true
|
Camel 2.9.3:
maxMessagesPerPoll の制限が Eager であるかどうかを制御できます。eager の場合、ファイルのスキャン中に制限されます。false の場合、すべてのファイルをスキャンし、並び替えを実行します。このオプションを false に設定すると、すべてのファイルを最初にソートしてからポーリングを制限できます。ソートのためにすべてのファイルの詳細がメモリー内にあるため、メモリー使用量が大きくなることに注意してください。
|
minDepth
|
0 |
Camel 2.8: ディレクトリーを再帰的に処理する際に処理を開始する最小深度。minDepth=1 は ベースディレクトリーを意味します。minDepth=2 は最初のサブディレクトリーを意味します。このオプションは FTP コンシューマーではサポートされて いません。
|
maxDepth
|
Integer.MAX_VALUE
|
Camel 2.8: ディレクトリーを再帰的に処理する際にトラバースする最大深度。このオプションは FTP コンシューマーではサポートされて いません。 |
processStrategy
|
null
|
プラグ可能な org.apache.camel.component.file.GenericFileProcessStrategy により、独自の readLock オプションまたは同様のものを実装できます。特別な 準備完了 ファイルが存在するなど、ファイルを使用する前に特別な条件を満たす必要がある場合にも使用できます。このオプションを設定すると、readLock オプションは適用されません。
|
startingDirectoryMustExist
|
false
|
開始ディレクトリーの存在が必要かどうか。autoCreate オプションはデフォルトで有効になっていることに注意してください。つまり、開始ディレクトリーが存在しない場合は通常は自動作成されます。autoCreate を無効にし、これを有効にして開始ディレクトリーが存在する必要があることを確認できます。ディレクトリーが存在しない場合は例外が発生します。
|
pollStrategy
|
null
|
プラグ可能な
org.apache.camel.spi.PollingConsumerPollStrategy により、Exchange が作成され、Camel でルーティングされる前に、通常ポーリング操作中に発生するエラー処理を制御するカスタム実装を提供できます。つまり、ポーリングで情報を収集している間にエラーが発生したため、たとえばファイルネットワークへのアクセスに失敗し、Camel がこれにアクセスしてファイルをスキャンできません。デフォルトの実装は、WARN レベルで原因となった例外をログに記録し、無視します。
|
sendEmptyMessageWhenIdle
|
false
|
Camel 2.9: ポーリングコンシューマーがファイルをポーリングしなかった場合は、このオプションを有効にして、代わりに空のメッセージ(ボディーなし)を送信できます。
|
consumer.bridgeErrorHandler
|
false
|
Camel 2.10: コンシューマーを Camel ルーティングエラーハンドラーにブリッジングできるようにします。つまり、ファイルの取得を試みる際に発生した例外はメッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは
org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、デフォルトでは WARN /ERROR レベルでログに記録され、無視されます。詳細は、How to use the Camel error handler to handling with exception triggered outside the routing engine を参照してください。
|
scheduledExecutorService
|
null
|
Camel 2.10: コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。このオプションを使用すると、複数のファイルコンシューマー間でスレッドプールを共有できます。
|
scheduler
|
null
|
Camel 2.12: カスタムスケジューラーを使用して、コンシューマーの実行をトリガーします。詳細は コンシューマーの ポーリング を参照してください。たとえば、CRON 式をサポートする Quartz2 および Springベースのスケジューラーがあります。 |
backoffMultiplier
|
0
|
Camel 2.12: 後続のアイドル状態/エラーが連続して発生した場合は、スケジュールされたポーリングコンシューマーのバックオフを解除します。乗数は、次の試行が行われる前にスキップされるポーリングの数になります。このオプションが設定されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。詳細は、Polling Consumer を参照してください。
|
backoffIdleThreshold
|
0
|
Camel 2.12: backoffMultipler が開始する前に発生する必要のある後続のアイドルポーリングの数。
|
backoffErrorThreshold
|
0
|
Camel 2.12: backoffMultipler が開始する前に発生すべき後続のエラーポーリングの数(エラーにより失敗)。
|
onCompletionExceptionHandler
|
Camel 2.16: カスタムの org.apache.camel.spi.ExceptionHandler を使用して、コンシューマーがコミットまたはロールバックを実行する完了プロセスのファイル中に発生する例外を処理します。デフォルトの実装は、WARN レベルですべての例外をログに記録し、無視します。
|
|
probeContentType
|
false
|
Camel 2.17: コンテンツタイプのプローブを有効にするかどうか。有効にすると、コンシューマーは
Files#probeContentType(java.nio.file.Path) を使用してファイルの Content-Type を判別し、キー Exchange#FILE_CONTENT_TYPE のヘッダーとしてメッセージに保存します。
注記: Camel 2.15 以降では、この関数が導入され、常に有効になっていました。しかし、Camel 2.17 以降、一部のファイルシステムで問題が発生する可能性があるため、デフォルトではオフになっています。
|
extendedAttributes
|
null
|
Camel 2.17: オプションの値に応じて Files.getAttribute(ava.nio.file.Path, java.lang.String attribute) または Files.readAttributes(ava.nio.file.Path, java.lang.String attributes) を使用して java.nio.file.attribute クラスで拡張ファイル属性の収集を有効にするには、以下を実行します。このオプションは、収集する属性のコンマ区切りリスト(例: basic:creationTime , posix:group -or a simple wildcard-or posix:* など)をサポートします。属性名の前には、基本属性が照会されます。結果は、CamelFileExtendedAttributes タイプのキー Map<String, Object> のヘッダーとして保存されます。キー は属性の名前(例: posix:group )で、値 は Files.getAttribute() または ----------|----- への呼び出しによって返された属性になります。Files.readAttributes
|
ファイルコンシューマーのデフォルト動作 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
- デフォルトでは、ファイルは処理期間中ロックされ ません。
- ルートが完了すると、ファイルは
.camel
サブディレクトリーに移動し、それらが削除されるように表示されます。 - File Consumer は、.、
.camel
、.m2
、.
groovy includeNamePrefix
、includeNamePostfix
、excludeNamePrefix
、excludeNamePostfix
、およびregexPattern
などのオプションが使用される場合、ファイル(ディレクトリーではない)のみが有効なファイル名に一致します。
プロデューサーのみ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
fileExist
|
オーバーライド
|
同じ名前のファイルがすでに存在する場合のアクション。以下の値を指定できます: Override、Append、Fail、Ignore、Move、および TryRename (Camel 2.11.1)。デフォルトの を 上書き し、既存のファイルを置き換えます。append は、既存のファイルにコンテンツを追加します。Fail は GenericFileOperationException を出力し、既存のファイルがあることを示します。ignore は問題をサイレントに無視し、既存のファイルは上書きし ません が、問題があるとします。
Move オプションには Camel 2.10.1 以降が必要で、対応する moveExisting オプションも設定する必要があります。オプション eagerDeleteTargetFile を使用して、ファイルの移動と既存ファイルがすでに存在する場合の動作を制御できます。そうしないと、移動操作が失敗します。Move オプションは、ターゲットファイルを書き込む前に既存のファイルを移動します。TryRename Camel 2.11.1 は、tempFileName オプションが使用されている場合にのみ適用されます。これにより、存在チェックを実行せずに、一時的なファイル名から実際のファイル名への変更を試みることができます。このチェックは、一部のファイルシステム、特に FTP サーバーでは高速になる場合があります。
|
tempPrefix
|
null
|
このオプションは、一時的な名前を使用してファイルを書き込み、書き込みが完了した後に、その名前を実際の名前に変更するために使用されます。書き込み中のファイルを識別し、(排他的読み取りロックを使用せずに) コンシューマーが進行中のファイルを読み取らないようにするために使用できます。大きなファイルをアップロードするときに FTP でよく使用されます。 |
tempFileName
|
null
|
Camel 2.1: tempPrefix オプションと 同じ ですが、File 言語を使用する一時的なファイル名の命名をより詳細に制御できます。
|
keepLastModified
|
false
|
Camel 2.2: ソースファイル(存在する場合)から最後に変更されたタイムスタンプを保持します。Exchange.FILE_LAST_MODIFIED ヘッダーを使用してタイムスタンプを見つけます。このヘッダーには、java.util.Date またはタイムスタンプ付きの long を含めることができます。タイムスタンプが存在し、オプションが有効な場合は、書き込まれたファイルにこのタイムスタンプが設定されます。注記: このオプションは、ファイル プロデューサーにのみ適用されます。このオプションは、ftp プロデューサーでは使用 できません。
|
eagerDeleteTargetFile
|
true
|
Camel 2.3: 既存のターゲットファイルを完全に削除するかどうか。このオプションは、fileExists=Override および tempFileName オプションも使用する場合にのみ適用されます。これを使用して、一時ファイルが書き込まれる前にターゲットファイルを削除することを無効化 (false に設定) できます。たとえば、大きなファイルを書き込んで、一時ファイルの書き込み中にターゲットファイルを存在させたい場合があります。これにより、一時ファイルの名前がターゲットファイル名に変更される直前まで、ターゲットファイルは削除されません。このオプションの Camel 2.10.1 から、fileExist=Move が有効で、既存のファイルが存在する場合に、既存のファイルを削除するかどうかを制御するためにも使用されます。オプション copyAndDeleteOnRenameFail が false の場合、既存のファイルが存在する場合は例外が出力されます。true の場合、既存のファイルは移動操作の前に削除されます。
|
doneFileName
|
null
|
Camel 2.6: 指定された場合、元のファイルが書き込まれると、Camel は 2 番目の 完了 ファイルを書き込みます。完了 ファイルは空になります。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的プレースホルダーを使用することもできます。完了 ファイルは、常に 元のファイルと同じフォルダーに書き込まれます。例は、writing done file セクションを参照してください。注記:外部プログラムがファイルを書き込む場合には、Red Hat は doneFileName オプションを使用することを推奨します。
|
allowNullBody
|
false
|
Camel 2.10.1: ファイルの書き込み中に null ボディーが許可されるかどうかを指定するために使用されます。true に設定すると空のファイルが作成され、false に設定して null の本文をファイルコンポーネントに送信しようとすると、Cannot write null body to file.という GenericFileWriteException が出力されます。fileExist オプションが Override に設定されている場合、ファイルは切り捨てられ、append に設定するとファイルは変更されません。 |
forceWrites
|
true
|
Camel 2.10.5/2.11: ファイルシステムへの書き込みを強制的に同期するかどうか。たとえばログや監査ログへの書き込みなど、このレベルの保証が必要ない場合はオフにすることでパフォーマンスが向上します。 |
chmod
|
null
|
Camel 2.15.0: プロデューサーによって送信されるファイルパーミッションを指定します。ここで、chmod の値は 000 から 777 の間でなければなりません。先頭の数字(例: 0755 -are)は無視されます。
|
chmodDirectory
|
null
|
Camel 2.17.0: プロデューサーが不足しているディレクトリーを作成する場合に使用されるディレクトリーパーミッションを指定します。ここで、chmod の値は 000 から 777 の間でなければなりません。先頭の数字(例: 0755 -are)は無視されます。
|
ファイルプロデューサーのデフォルト動作 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
- デフォルトでは、同じ名前の既存ファイルが存在する場合は、既存のファイルを上書きします。Apache Camel 1.x では、
Append
がファイルプロデューサーのデフォルトです。これはjava.io.File
を使用したデフォルトのファイル操作であるため、Apache Camel 2.0 でOverride
に変更しました。また、camel-ftp コンポーネントで使用する FTP ライブラリーのデフォルトです。
移動および削除操作 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
移動または削除操作は、ルーティングが完了した後(コマンド後)で実行されます。したがって、
エクスチェンジ
の処理中に、ファイルは引き続き inbox フォルダーにあります。
以下に例を示します。
from("file://inbox?move=.done").to("bean:handleOrder");
from("file://inbox?move=.done").to("bean:handleOrder");
inbox
フォルダーにファイルがドロップされると、ファイルコンシューマーはこれを通知し、handleOrder
Bean にルーティングされる新しい FileExchange
を作成します。その後、Bean は File
オブジェクトを処理します。この時点で、ファイルは inbox
フォルダーに残ります。Bean が完了し、ルートが完了すると、ファイルコンシューマーは move 操作を実行し、ファイルを .done
サブフォルダーに移動します。
move オプションおよび preMove オプションはディレクトリー名とみなされます( File Language や Simple などの式を使用する場合、式の評価の結果は使用されるファイル名になります)。たとえば、を設定すると、以下のようになります。
move=../backup/copy-of-${file:name}
move=../backup/copy-of-${file:name}
次に、使用する File 言語 を使用して、使用するファイル名を返します。これは、relative または absolute のいずれかです。相対的な場合、ディレクトリーは、ファイルが消費されたフォルダー内からのサブフォルダーとして作成されます。
デフォルトでは、Apache Camel は、ファイルが消費されたディレクトリーとの関連で、消費されたファイルを
.camel
サブフォルダーに移動します。
処理後にファイルを削除する場合は、ルートは以下のようになります。
from("file://inobox?delete=true").to("bean:handleOrder");
from("file://inobox?delete=true").to("bean:handleOrder");
ファイルが処理される 前 に移動する 事前 移動操作が導入されました。これにより、処理前にこのサブフォルダーに移動する際にスキャンされたファイルをマークできます。
from("file://inbox?preMove=inprogress").to("bean:handleOrder");
from("file://inbox?preMove=inprogress").to("bean:handleOrder");
pre move と通常の移動を組み合わせることができます。
from("file://inbox?preMove=inprogress&move=.done").to("bean:handleOrder");
from("file://inbox?preMove=inprogress&move=.done").to("bean:handleOrder");
したがって、このような状況では、処理中および処理された後にファイルが
進行中
のフォルダーにある場合、このファイルは .done
フォルダーに移動します。
移動および PreMove オプションの詳細な制御 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
move オプションおよび preMove オプションは Expression-based であるため、ディレクトリーおよび名前パターンの高度な設定を行うために File Language の全機能を使用できます。実際、Apache Camel は、入力したディレクトリー名を File Language 式に内部的に変換します。そのため、
move=.done
を入力すると、Apache Camel がこれを ${file:parent}/.done/${file:onlyname}
に変換します。これは、Apache Camel がオプション値に ${ }
を指定していないことを検知した場合にのみ行われます。そのため、${ }
を含む式を入力すると、式は File Language 式として解釈されます。
したがって、パターンとして現在の日付を持つバックアップフォルダーにファイルを移動する場合は、以下を行うことができます。
move=backup/${date:now:yyyyMMdd}/${file:name}
move=backup/${date:now:yyyyMMdd}/${file:name}
moveFailed について リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
moveFailed
オプションを使用すると、処理 できない ファイルを、選択したエラーフォルダーなどの別の場所に移動できます。たとえば、タイムスタンプ付きのエラーフォルダー内のファイルを移動するには、moveFailed=/error/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:name.ext}
を使用できます。
その他の例については、File Language を参照してください。
メッセージヘッダー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントでは、以下のヘッダーがサポートされます。
ファイルプロデューサーのみ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ヘッダー | 説明 |
---|---|
CamelFileName
|
書き込むファイルの名前を指定します(エンドポイントディレクトリーへの相対パス)。名前は String 、File Language または Simple 式を持つ String 、または Expression オブジェクトになります。null の場合、Apache Camel はメッセージ固有の ID に基づいてファイル名を自動生成します。
|
CamelFileNameProduced
|
書き込まれた出力ファイルの実際の絶対パス(パス + 名)。このヘッダーは Camel によって設定され、その目的は書き込まれたファイルの名前でエンドユーザーを提供します。 |
CamelOverruleFileName
|
Camel 2.11: CamelFileName ヘッダーのオーバーラップに使用され、代わりに値を使用します(ただし、プロデューサーは ファイルの書き込み後にこのヘッダーを削除するため、1 回のみ)。値は String のみにすることができます。fileName オプションが設定されている場合、これは引き続き評価されていることに注意してください。
|
ファイルコンシューマーのみ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ヘッダー | 説明 |
---|---|
CamelFileName
|
消費されたファイルの名前(エンドポイントに設定された開始ディレクトリーからのオフセットを含む相対パス)。 |
CamelFileNameOnly
|
ファイル名のみ (先行パスを含まない名前)。 |
CamelFileAbsolute
|
消費されたファイルが絶対パスを表すかどうかを指定する ブール値 オプション。通常、相対パスの場合は false である必要があります。絶対パスは通常使用しないでくださいが、ファイルを絶対パスに移動できるように move オプションに追加しました。ただし、他の場所でも使用することができます。
|
CamelFileAbsolutePath
|
ファイルへの絶対パス。相対ファイルの場合、このパスは代わりに相対パスを保持します。 |
CamelFilePath
|
ファイルパス。相対ファイルの場合、これは開始ディレクトリー + 相対ファイル名になります。絶対ファイルの場合、これは絶対パスです。 |
CamelFileRelativePath
|
相対パス。 |
CamelFileParent
|
親パス。 |
CamelFileLength
|
ファイルサイズを含む long 値。
|
CamelFileLastModified
|
ファイルの最終変更のタイムスタンプを含む long 値。
|
バッチコンシューマー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントは、バッチコンシューマー を 実装し ます。
エクスチェンジプロパティー、ファイルコンシューマーのみ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ファイルコンシューマーは
BatchConsumer
であるため、ポーリングするファイルのバッチ処理をサポートします。バッチ処理により、Apache Camel はいくつかのプロパティーを エクスチェンジ に追加し、現在のインデックスをポーリングしたファイルの数を把握します。
プロパティー | 説明 |
---|---|
CamelBatchSize
|
このバッチでポーリングされたファイルの合計数。 |
CamelBatchIndex
|
バッチの現在のインデックス。0 から始まります。 |
CamelBatchComplete
|
バッチの最後の エクスチェンジ を示す ブール 値。最後のエントリーに対してのみ true になります。
|
これにより、たとえば、このバッチに存在するファイルの数を把握し、Aggregator はこの数のファイルを集約できます。
フォルダーおよびファイル名を使用した一般的な gotchas リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel がファイルを生成する場合(ファイルの書き込み)、選択したファイル名の設定方法に影響を及ぼします。デフォルトでは、Apache Camel はメッセージ ID をファイル名として使用し、メッセージ ID は通常一意の生成された ID であるため、
ID-MACHINENAME-2443-1211718892437-1-0 などのファイル名になります
。このようなファイル名が必要ない場合は、CamelFileName
メッセージヘッダーにファイル名を指定する必要があります。定数 Exchange.FILE_NAME
も使用できます。
以下のサンプルコードは、メッセージ ID をファイル名として使用してファイルを作成します。
from("direct:report").to("file:target/reports");
from("direct:report").to("file:target/reports");
report.txt
をファイル名として使用するには、以下を実行します。
from("direct:report").setHeader(Exchange.FILE_NAME, constant("report.txt")).to( "file:target/reports");
from("direct:report").setHeader(Exchange.FILE_NAME, constant("report.txt")).to( "file:target/reports");
または上記と同じですが、
CamelFileName
の場合:
from("direct:report").setHeader("CamelFileName", constant("report.txt")).to( "file:target/reports");
from("direct:report").setHeader("CamelFileName", constant("report.txt")).to( "file:target/reports");
fileName URI オプションを使用してエンドポイントにファイル名を設定する構文。
from("direct:report").to("file:target/reports/?fileName=report.txt");
from("direct:report").to("file:target/reports/?fileName=report.txt");
ファイル名式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ファイル名は、expression オプションを使用するか、
CamelFileName
ヘッダーの文字列ベースの File Language 式のいずれかを使用して設定できます。構文およびサンプルについては、File Language を参照してください。
他のファイルを直接ドロップするフォルダーからのファイルの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
他のアプリケーションがファイルを直接書き込むフォルダーからファイルを消費する場合は注意してください。さまざまな
readLock
オプションを見て、ユースケースに適したものを確認します。ただし、最善の方法は、別のフォルダーに書き込み、書き込み後にドロップフォルダーにファイルを移動することです。ただし、ドロップフォルダーに直接ファイルを書き込むと、ファイルが 変更
されたアルゴリズムを使用して、ファイルのサイズや変更が一定期間変更されるかどうかを確認するため、変更されたファイルが現在書き込みまたはコピーされているかどうかをより適切に検出できます。他の読み取りロックオプションは、これを検出するときに必ずしも適切ではない Java File API に依存します。また、doneFileName
オプションも確認します。これは、ファイルが完了して使用できるときにマーカーファイル(done)を使用してシグナルを送ります。
完了ファイルの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.6 以降で利用可能
また、以下の 実行ファイルの書き込み のセクション を参照してください。
完了ファイルが存在する場合にのみファイルを消費する場合は、エンドポイントで
doneFileName
オプションを使用できます。
from("file:bar?doneFileName=done");
from("file:bar?doneFileName=done");
ターゲットファイルと同じディレクトリーにファイル名が存在する場合にのみ、bar フォルダーからファイルを消費します。Camel は、ファイルの使用が完了すると、完了ファイルを自動的に削除します。
ただし、ターゲットファイルごとに 1 つのファイルを配置するのが一般的です。これは、相関が 1:1 であることを意味します。これを実行するには、
doneFileName
オプションで動的プレースホルダーを使用する必要があります。現在、Camel は、file:name および file:name
.noext の 2 つの動的トークンをサポートします。
これは ${ } で囲む必要があります。コンシューマーは、接頭辞または接尾辞(両方ではない)として実行されたファイル名の静的部分のみをサポートします。
from("file:bar?doneFileName=${file:name}.done");
from("file:bar?doneFileName=${file:name}.done");
この例では、ファイル名が .done の完了したファイルが存在する場合にのみポーリングされます。以下に例を示します。
hello.txt
- 消費されるファイルです。hello.txt.done
- 関連する完了ファイルです。
以下のように、完了ファイルの接頭辞を使用することもできます。
from("file:bar?doneFileName=ready-${file:name}");
from("file:bar?doneFileName=ready-${file:name}");
hello.txt
- 消費されるファイルです。ready-hello.txt
- 関連する完了ファイルです。
行われたファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.6 以降で利用可能
af ファイルを書き込んだ後は、ファイルが 完了 して書き込まれたことを他の人に示すために、追加の完了ファイルをマーカーとして書き出すことができます。これには、ファイルプロデューサーエンドポイントで
doneFileName
オプションを使用できます。
.to("file:bar?doneFileName=done");
.to("file:bar?doneFileName=done");
は単に、target ファイルと同じディレクトリーに
done
という名前のファイルを作成します。
ただし、ターゲットファイルごとに 1 つのファイルを配置するのが一般的です。これは、相関が 1:1 であることを意味します。これを実行するには、
doneFileName
オプションで動的プレースホルダーを使用する必要があります。現在 Camel は、file:name および file:name
.noext の 2 つの動的トークンをサポートします。
これは、${ }
で囲む必要があります。
.to("file:bar?doneFileName=done-${file:name}");
.to("file:bar?doneFileName=done-${file:name}");
たとえば、ターゲットファイルがターゲットファイルと同じディレクトリーに
foo.txt
の場合は、done-foo.txt
という名前のファイルを作成します。
.to("file:bar?doneFileName=${file:name}.done");
.to("file:bar?doneFileName=${file:name}.done");
たとえば、ターゲットファイルがターゲットファイルと同じディレクトリーに
foo.txt.done
であった場合、foo.txt
.done という名前のファイルを作成します。
.to("file:bar?doneFileName=${file:name.noext}.done");
.to("file:bar?doneFileName=${file:name.noext}.done");
たとえば、ターゲットファイルが
foo.txt
の場合に、ターゲットファイルと同じディレクトリーに foo.done
という名前のファイルを作成します。
ディレクトリーから読み取り、別のディレクトリーに書き込みます。 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
from("file://inputdir/?delete=true").to("file://outputdir")
from("file://inputdir/?delete=true").to("file://outputdir")
オーバールール動的名を使用したディレクトリーからの読み取り、別のディレクトリーへの書き込み リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
from("file://inputdir/?delete=true").to("file://outputdir?overruleFile=copy-of-${file:name}")
from("file://inputdir/?delete=true").to("file://outputdir?overruleFile=copy-of-${file:name}")
ディレクトリーでリッスンし、そこにドロップされる各ファイルのメッセージを作成します。コンテンツを
outputdir
にコピーし、inputdir
のファイルを削除します。
ディレクトリーから再帰的に読み取り、別のディレクトリーへの書き込み リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
from("file://inputdir/?recursive=true&delete=true").to("file://outputdir")
from("file://inputdir/?recursive=true&delete=true").to("file://outputdir")
ディレクトリーでリッスンし、そこにドロップされる各ファイルのメッセージを作成します。コンテンツを
outputdir
にコピーし、inputdir
のファイルを削除します。はサブディレクトリーに再帰的にスキャンします。は、サブディレクトリーを含む inputdir
と同じディレクトリー構造のファイルを outputdir
に配置します。
inputdir/foo.txt inputdir/sub/bar.txt
inputdir/foo.txt
inputdir/sub/bar.txt
以下の出力レイアウトが生成されます。
outputdir/foo.txt outputdir/sub/bar.txt
outputdir/foo.txt
outputdir/sub/bar.txt
フラット化の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ファイルを同じディレクトリーの outputdir ディレクトリーに保存する場合は、ソースディレクトリーのレイアウトを無視する(たとえば、パスをフラット化するなど)、ファイルプロデューサー側で
flatten=true
オプションを追加するだけです。
from("file://inputdir/?recursive=true&delete=true").to("file://outputdir?flatten=true")
from("file://inputdir/?recursive=true&delete=true").to("file://outputdir?flatten=true")
以下の出力レイアウトが生成されます。
outputdir/foo.txt outputdir/bar.txt
outputdir/foo.txt
outputdir/bar.txt
ディレクトリーおよびデフォルトの移動操作からの読み取り リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel はデフォルトで、処理されたファイルを、ファイルが消費されたディレクトリー内の
.camel
サブディレクトリーに移動します。
from("file://inputdir/?recursive=true&delete=true").to("file://outputdir")
from("file://inputdir/?recursive=true&delete=true").to("file://outputdir")
は、以前と同様にレイアウト に影響します。
inputdir/foo.txt inputdir/sub/bar.txt
inputdir/foo.txt
inputdir/sub/bar.txt
after
inputdir/.camel/foo.txt inputdir/sub/.camel/bar.txt outputdir/foo.txt outputdir/sub/bar.txt
inputdir/.camel/foo.txt
inputdir/sub/.camel/bar.txt
outputdir/foo.txt
outputdir/sub/bar.txt
ディレクトリーから読み取り、java でメッセージを処理します。 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ボディーは、
inputdir
ディレクトリーにドロップされたばかりのファイルを参照する File
オブジェクトです。
ディレクトリーからファイルを読み込み、内容を jms キューに送信します。 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
from("file://inputdir/").convertBodyTo(String.class).to("jms:test.queue")
from("file://inputdir/").convertBodyTo(String.class).to("jms:test.queue")
デフォルトでは、
File
エンドポイントは File オブジェクトが含まれる FileMessage
をボディーとして送信します。これを JMS コンポーネントに直接送信すると、JMS メッセージには File
オブジェクトのみが含まれますが、コンテンツは含まれません。File
を String
に変換することで、メッセージにはファイルの内容(おそらく必要なもの)が含まれます。
Spring DSL を使用した上記のルート:
<route> <from uri="file://inputdir/"/> <convertBodyTo type="java.lang.String"/> <to uri="jms:test.queue"/> </route>
<route>
<from uri="file://inputdir/"/>
<convertBodyTo type="java.lang.String"/>
<to uri="jms:test.queue"/>
</route>
ファイルへの書き込み リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel は当然ながらファイルを書き込むこともできます。つまり、ファイルが生成されます。以下の例では、ディレクトリーに書き込まれる前に処理する SEDA キューに関するレポートの一部を受け取ります。
Exchange.FILE_NAME を使用してサブディレクトリーに書き込みます。 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
単一ルートを使用すると、任意の数のサブディレクトリーにファイルを書き込むことができます。以下のようなルート設定がある場合:
<route> <from uri="bean:myBean"/> <to uri="file:/rootDirectory"/> </route>
<route>
<from uri="bean:myBean"/>
<to uri="file:/rootDirectory"/>
</route>
myBean
をヘッダー Exchange.FILE_NAME
を以下のような値に設定できます。
Exchange.FILE_NAME = hello.txt => /rootDirectory/hello.txt Exchange.FILE_NAME = foo/bye.txt => /rootDirectory/foo/bye.txt
Exchange.FILE_NAME = hello.txt => /rootDirectory/hello.txt
Exchange.FILE_NAME = foo/bye.txt => /rootDirectory/foo/bye.txt
これにより、1 つのルートを使用してファイルを複数の宛先に書き込むことができます。
一時ディレクトリーを使用した最終的な宛先へのファイルの書き込み リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
時折、宛先ディレクトリーに関連する一部のディレクトリーにファイルを一時的に書き込む必要があります。このような状況は、通常、書き込み先のディレクトリーから一部のフィルター機能を持つ外部プロセスを読み取ると発生します。以下のファイルの例では、
/var/myapp/filesInProgress
ディレクトリーに書き込まれ、データ転送が完了すると、アトミックで /var/myapp/finalDirectory
ディレクトリーに移動します。
from("direct:start"). to("file:///var/myapp/finalDirectory?tempPrefix=/../filesInProgress/");
from("direct:start").
to("file:///var/myapp/finalDirectory?tempPrefix=/../filesInProgress/");
ファイル名の式の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
この例では、現在の日付をサブフォルダー名として使用して、消費したファイルをバックアップフォルダーに移動します。
from("file://inbox?move=backup/${date:now:yyyyMMdd}/${file:name}").to("...");
from("file://inbox?move=backup/${date:now:yyyyMMdd}/${file:name}").to("...");
その他のサンプルについては、File Language を参照してください。
同じファイルを複数回読み取るのを回避(べき等コンシューマー) リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel はコンポーネント内 で直接べき等コンシューマー をサポートするため、すでに処理されたファイルを省略します。この機能は、
idempotent=true
オプションを設定することで有効にできます。
from("file://inbox?idempotent=true").to("...");
from("file://inbox?idempotent=true").to("...");
Camel は絶対ファイル名をべき等キーとして使用し、重複ファイルを検出します。Camel 2.11 以降では、IdempotentKey オプションの式を使用してこのキーをカスタマイズできます。たとえば、名前とファイルサイズの両方をキーとして使用するには、以下を実行します。
<route> <from uri="file://inbox?idempotent=true&dempotentKey=${file:name}-${file:size}"/> <to uri="bean:processInbox"/> </route>
<route>
<from uri="file://inbox?idempotent=true&dempotentKey=${file:name}-${file:size}"/>
<to uri="bean:processInbox"/>
</route>
デフォルトでは、Apache Camel は消費されたファイルを追跡するためにインメモリーベースのストアを使用し、最大 1000 エントリーを保持する最も最近使用されたキャッシュを使用します。指定された ID を持つレジストリー内の Bean の参照を示すために、値に
#
記号を使用して、このストアの独自の実装をプラグインでき ます
。
Apache Camel は、以前に使用されたためファイルをスキップすると
DEBUG
レベルでログを記録します。
DEBUG FileConsumer is idempotent and the file has been consumed before. Will skip this file: target\idempotent\report.txt
DEBUG FileConsumer is idempotent and the file has been consumed before. Will skip this file: target\idempotent\report.txt
ファイルベースのべき等リポジトリーの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、デフォルトとして使用されるメモリー内ベースではなく、ファイルベースのべき等リポジトリー
org.apache.camel.processor.idempotent.FileIdempotentRepository
を使用します。このリポジトリーは、ファイルリポジトリーを読み取らないために 1 つのレベルキャッシュを使用します。これは、file リポジトリーを使用して 1 レベルのキャッシュの内容を保存します。これにより、リポジトリーはサーバーの再起動後も維持されます。これは、起動時にファイルの内容を 1 レベルのキャッシュに読み込みます。ファイル構造は、キーを ファイルの別々の行に保存するため、非常に簡単です。デフォルトでは、ファイルストアのサイズ制限は 1mb で、ファイルが大きくなると、Apache Camel はファイルストアを切り捨て、1 番目のレベルのキャッシュを新しい空のファイルにフラッシュしてコンテンツを再ビルドします。
Spring XML を使用してファイルべき等リポジトリーを作成し、
\#
記号を使用して idempotentRepository
でリポジトリーを使用するようにファイルコンシューマーを定義し、レジストリー検索を示します。
JPA ベースのべき等リポジトリーの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、デフォルトとして使用されるインメモリーベースの代わりに、JPA ベースのべき等リポジトリーを使用します。
最初に、
org.apache.camel.processor.idempotent.jpa.MessageProcessed
クラスをモデルとして使用する必要がある META-INF/persistence.xml
に persistence-unit が必要です。
次に、Spring XML ファイルで Spring
jpaTemplate
を設定する必要があります。
最後に、Spring XML ファイルで JPA idempotent リポジトリーを作成することもできます。
次に、
idempotentRepository
オプションと #
構文を使用して、ファイルコンシューマーエンドポイントで jpaStore Bean のみを参照する必要があります。
<route> <from uri="file://inbox?idempotent=true&dempotentRepository=#jpaStore"/> <to uri="bean:processInbox"/> </route>
<route>
<from uri="file://inbox?idempotent=true&dempotentRepository=#jpaStore"/>
<to uri="bean:processInbox"/>
</route>
org.apache.camel.component.file.GenericFileFilter を使用するフィルター リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel はプラグ可能なフィルターリングストラテジーをサポートします。その後、このようなフィルターでエンドポイントを設定し、処理中の特定のファイルを省略できます。
この例では、ファイル名の skip で始まるファイルを
スキップ
する独自のフィルターを構築します。
次に、filter 属性を使用して、Spring XML ファイルで定義したフィルター(
#
表記を使用)を参照するルートを設定できます。
ANT パスマッチャーを使用したフィルターリング リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ANT パスマッチャーは、camel-spring jar で追加設定なしで提供されます。そのため、Maven を使用している場合は camel-spring に依存する必要があります。理由は、Spring の AntPathMatcher を使用して実際のマッチングを行うことです。
ファイルパスは、以下のルールと一致します。
?
1 文字に一致します。*
ゼロ以上の文字に一致します。**
パス内の 0 個以上のディレクトリーに一致します。
以下の例は、その使用方法を示しています。
Comparator を使用したソート リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel はプラグ可能なソートストラテジーをサポートします。Java の
java.util.Comparator
でビルドを使用するこのストラテジーです。その後、このようなコンパレーターでエンドポイントを設定し、Apache Camel でファイルをソートしてから処理できます。
この例では、ファイル名でソートする独自のコンパレーターを構築します。
public class MyFileSorter implements Comparator<GenericFile> { public int compare(GenericFile o1, GenericFile o2) { return o1.getFileName().compareToIgnoreCase(o2.getFileName()); } }
public class MyFileSorter implements Comparator<GenericFile> {
public int compare(GenericFile o1, GenericFile o2) {
return o1.getFileName().compareToIgnoreCase(o2.getFileName());
}
}
次に、sorter オプションを使用してルートを設定し、Spring XML ファイルで定義したソーター(
mySorter
)を参照できます。
URI オプションは # 構文を使用して Bean を参照できます。
Spring DSL ルートでは、id の前に
#
を付けることで、レジストリー 内の Bean を参照できます。そのため、sorter=#mySorter
を記述すると、Apache Camel に対して ID mySorter
の Bean の Bean を検索するよう指示されます。
sortBy を使用したソート リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel はプラグ可能なソートストラテジーをサポートします。このストラテジーでは、File 言語 を使用してソートを設定します。
sortBy
オプションは以下のように設定されます。
sortBy=group 1;group 2;group 3;...
sortBy=group 1;group 2;group 3;...
各グループはセミコロンで区切ります。簡単な状況では、1 つのグループのみを使用するので、簡単な例を以下に示します。
sortBy=file:name
sortBy=file:name
ファイル名でソートされ、グループの前に
reverse:
を付けることで順序を元に戻すことができるため、ソートは Z..A になります。
sortBy=reverse:file:name
sortBy=reverse:file:name
File Language の完全なパワーがあるので、他のいくつかのパラメーターを使用できるので、ファイルサイズでソートしたい場合は以下を行います。
sortBy=file:length
sortBy=file:length
文字列比較には
ignoreCase:
を使用してケースを無視するように設定できます。したがって、ファイル名のソートを使用し、ケースを無視する場合は、以下を行います。
sortBy=ignoreCase:file:name
sortBy=ignoreCase:file:name
ignore case と reverse を組み合わせることができますが、最初に逆を指定する必要があります。
sortBy=reverse:ignoreCase:file:name
sortBy=reverse:ignoreCase:file:name
以下の例では、最後に変更されたファイルで、以下を行います。
sortBy=file:modified
sortBy=file:modified
次に、2 番目のオプションとして名前でグループ化するため、同じ変更を持つファイルを名前でソートします。
sortBy=file:modified;file:name
sortBy=file:modified;file:name
ここで問題が存在しますが、これを見つけることができますか ?ファイルの変更されたタイムスタンプはミリ秒単位であるため問題になりすぎますが、日付のみで、その後にサブグループを名前でソートしたい場合はどうすればよいですか ?また、ファイル言語の本当の力が あれば、パターンをサポートする date コマンドを使用できます。そのため、以下のように解決できます。
sortBy=date:file:yyyyMMdd;file:name
sortBy=date:file:yyyyMMdd;file:name
Yeah は非常に強力で、グループごとに reverse を使用することもできます。そのため、ファイル名を元に戻すことができます。
sortBy=date:file:yyyyMMdd;reverse:file:name
sortBy=date:file:yyyyMMdd;reverse:file:name
GenericFileProcessStrategy の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
processStrategy
オプションは、カスタムの GenericFileProcessStrategy
を使用できます。これにより、独自の 開始、コミット、および ロールバック ロジックを実装できます。たとえば、システムが使用するフォルダーにファイルを書き込むことを前提とします。ただし、別の 準備完了 ファイルも書き込まれる前に、このファイルの使用を開始することはできません。
そのため、独自の
GenericFileProcessStrategy
を実装することで、以下のように実装できます。
begin ()
メソッドでは、特別な 準備 済みファイルが存在するかどうかをテストできます。begin メソッドはブール値
を返し、ファイルを使用できるかどうかを示します。commit ()
メソッドでは、実際のファイルを移動し、準備完了 ファイルを削除することもできます。
使用における重要
consumer.bridgeErrorHandler
consumer.bridgeErrorHandler
を使用する場合、インターセプター のOnCompletion は適用さ れません。Exchange は Camel Error Handler によって直接処理され、インターセプターなどの以前のアクションがCompletion のアクションを実行することを許可しません。
デバッグロギング リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントにはログレベル TRACE があり、問題がある場合に役立ちます。
以下も参照してください。