我创建了一个路由,该路由
问题:如何根据数据集中的随机数组来打印多个文件?如何根据聚合器生成的数组数量打印多个文件?
from("file:C:\\Users\\Desktop?fileName=books.xml&noop=true")
.split(xpath("/books/book"))
.process(new MyProcessor())
.setHeader("category", xpath("/book/@category").stringResult())
.aggregate(header("category"), new SetAggregationStrategy()).completionTimeout(500)
.process(new MyProcessor())
.convertBodyTo(String.class)
.to("file:C:\\Users\\Desktop\\New")
.end();
我想你只是 在每次聚合时,覆盖相同的文件。. 为了避免这种情况,你必须给每个aggregation另一个(动态)文件名来写入它。
例如,要设置 [categoryname].xml 作为每个聚合的文件名,你可以使用
.setHeader(Exchange.FILE_NAME, simple("${headers.category}.xml"))
Exchange.FILE_NAME是一个Camel常量,用于文件名头,并以 简单的表达语言 您可以将您在路由中设置为头的类别名称和一个静态文件后缀连接起来。
如果同一个类别被重复聚合,你必须进一步扩展文件名(否则一个类别会覆盖它之前的文件)。例如用时间戳或类似的方式。