我正在尝试做ETL工作(读取,转换,存储excel)。 这条路线工作正常:
from("file:src/data?move=processed&moveFailed=error&idempotent=true")
.bean(ExcelTransformer.class,"process")
.to("jpa:cie.service.receiver.DatiTelefonici?entityType=java.util.ArrayList");
但是我需要在Exception的情况下进行自定义:我需要将文件移动到其他文件夹中,然后应用:
onException(Throwable.class).maximumRedeliveries(0).to("file:src/data?move=error");
但是文件组件无法移动文件,因为第一个文件comp实例是locket。 然后我尝试使用try / catch但它不起作用(可能是catch内部的移动操作不知道正确的文件名?)
from("file:src/data?noop=true")
.doTry()
.bean(ExcelTransformer.class,"process")
.to("jpa:cie.service.receiver.DatiTelefonici?entityType=java.util.ArrayList")
.to("file:src/data?move=processed")
.doCatch(Throwable.class)
.to("file:src/data?move=error")
.end();
罐
经过多次评论后,我的当前代码如下:
from("file:src/data?noop=false&delete=true")
.doTry()
.bean(ExcelTransformer.class,"process") .to("jpa:cie.service.receiver.DatiTelefonici?entityType=java.util.ArrayList")
.to("file:src/data/processed")
.doCatch(Throwable.class)
.to("file:src/data/error")
/*
.doFinally()
.to("file:src/data:delete=true")
*/
.end();
它正确处理处理和错误文件夹中的文件,但该文件仍保留在主文件夹中,并且以递归方式进行更多预处理
答案 0 :(得分:0)
如果我理解你的问题,那么你需要从参数中删除idempotent=true
,然后它应该有效:
from("file:src/data?move=processed&moveFailed=error")
.bean(ExcelTransformer.class,"process")
.to("jpa:cie.service.receiver.DatiTelefonici?entityType=java.util.ArrayList");
如果路由成功,则上一个路由会将文件移动到processed
文件夹,否则会将文件移动到error
文件夹(如果发生任何异常)。文件名不会被更改。
from("file://src/data?delete=true")
.doTry()
.bean(ExcelTransformer.class,"process")
.to("jpa:cie.service.receiver.DatiTelefonici?entityType=java.util.ArrayList")
.to("file://src/data/processed")
.doCatch(Throwable.class)
.to("file://src/data/error")
.end();