私はパス上にファイルを保存していますC:\Cdr\core\year\month\date\fileName
前日に作成されたすべてのファイルを圧縮したいと思います。動的ファイルパスとファイル名をファイルConsumerに提供する方法が見つかりませんファイルを圧縮します。 filename=${beans:utility.generateFileName}
を使用している場合でも、ファイルパスではなくファイル名のみを提供できます。これはApacheのZipファイルデータフォーマットを使用する方法です。apache camelでファイルをジッピングする
答えて
私は
<routeContext id="zipFileRoute" xmlns="http://camel.apache.org/schema/spring">
<route id="zipFile">
<from uri="file://C:/CdrJson?recursive=true&delete=true&filter=#myFilter/>
<log message="reading from ${in.header.CamelFileName} and file path is ${file:path}"/>
<setHeader headerName="CamelFileName">
<simple>${bean:utility?method=processFileName}</simple>
</setHeader>
<marshal>
<zipFile/>
</marshal>
<to uri="file://C:/CdrJson"/>
<log message="This route finished zipping files"/>
</route>
</routeContext>
にmyFilterをのためのコードのフィルタを使用して同じ道を見つけ:私が正しくあなたの質問を理解していれば
public class MyFileFilter<T> implements GenericFileFilter<T> {
public boolean accept(GenericFile<T> file) {
// we want all directories
if (file.isDirectory()) {
return true;
}
Calendar date = new GregorianCalendar();
String fileName = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
if(file.getFileNameOnly().startsWith(fileName)){
return false;
}
return !file.getFileName().endsWith(".zip");
}
}
GenericFileFilterを使用して、作成日に基づいてファイルをフィルタリングします。これを実行時に使用すると、目的の基準に合致しないファイルをスキップすることができます。
ダイナミックパス:私はあなたが期待しているダイナミズムのどのレベルについて確認していません。ファイルコンシューマはポーリングコンシューマであり、メッセージを受信するときに明示的に呼び出しを行います。どちらかのハードコードは、ファイルパスまたはプロパティファイルから実行時に解決し、動的パスだから、あなたがすることができます:以下のように(参考文献Proertyplaceholder)、
<from uri="file:{{consumer.file.path}}"/>
は、Zipファイルには:あなたは以下のように集約パターンを使用する必要があります、
from("file:{{consumer.file.path}}")
.aggregate(new ZipAggregationStrategy())
.constant(true)
.completionFromBatchConsumer()
.eagerCheckCompletion()
.setHeader(Exchange.FILE_NAME, constant("<DesiredFileName>.zip"))
.to("file:output/directory");
希望します。
問題は、日付、月、年が含まれているので、プロパティファイルにファイルパスまたはファイル名を静的に与えることができないということです。また、上記のコードをSpring DSLで記述する方法については、参考にしてください。 –
ファイルのコンシューマディレクトリパスは、動的な単純な「式」、つまり$ {}をサポートしていません。したがって、現在の日付タイムスタンプをパスで使用することはできません。しかし、別の回避策は、実行時にURL全体を計算できるコンシューマテンプレートを使用できることです。注:ConsumerTemplateは少しコストがかかるので、Springのライフサイクルを処理させます。 java dslをspring dslに変換するのは簡単です。 Pl try –
あなたが現在の交換に基づいて実行時に計算された動的URIを受け入れるpollenrichを使うことができるのは、単一のファイルだけを取得する場合です。 –
- 1. 複数のファイルをC++でジッピングする
- 2. Apache CAMELプロセスのファイル存在
- 3. ファイルをキューに入れるApache Camel
- 4. AWS S3(Apache Camelの使用)でファイルをマージする
- 5. Apache Camelメッセージスコープ
- 6. インターセプタとApache Camel
- 7. Apache ActiveMQ Camelフェールオーバー
- 8. Apache Camel XML Validator
- 9. apache camel restパッチ
- 10. Apache camel split enrich
- 11. Apache CamelとRuby
- 12. Apache Camel RedisIdempotentRepository Configuration
- 13. Apache Camel:プロキシコード
- 14. Apache Camel Beansユニットテスト
- 15. ビジュアルツーリングfor apache camel
- 16. Apache Camelルーティング
- 17. 複数ファイルI/O with apache camel
- 18. 処理後のApache Camel移動ファイル
- 19. ディレクトリ間のApache camelファイルのコピー
- 20. Apache CamelプラグインでGrailsをインストールする
- 21. Apache Camelでのストレートスルー処理
- 22. apache camelを使用してファイルをコピーする方法
- 23. Apache Camelでエラーにルーティングする方法
- 24. Apache Camel Spring Web Services
- 25. Apache camelの設定
- 26. Apache Camel Dynamic Httpコール
- 27. Apache-camel - カスタムエラー処理
- 28. Apache Camel 2.13.0 quit splitter
- 29. apache camelのアンマーシャリング(JSON)
- 30. SpringブートApache Camelルートテスト
を、あなたは昨日から作成されたすべてのファイルを圧縮したいですファイル名を持つ特定のパス(ftpまたはローカルドライブですか)が正しいですか?サンプルコードを共有できますか? –