检查基于内容的路由是否存在文件

时间:2016-12-28 06:08:48

标签: java apache-camel predicate

在一个camel路由器中,我们检查是否存在一个标志文件,只有在它存在时才会继续。这是我们打算使用的代码,但它不起作用。

String flagFilePath = "file:" + flagFileFolder
        + "?noop=true&idempotent=false&fileName=" + flagFileName;
    from(flagFilePath)
        .choice()
        .when(header("CamelFileName").isNotNull())
            .log(LoggingLevel.TRACE, "Flag file exists.")
        .otherwise()
            .log(LoggingLevel.INFO, "Flag file does not exist.");

我知道otherwise ,因为如果文件不存在,则不会触发整个路由器。

是否有一种简单的方法可以检查文件是否存在而无需手写谓词?

(注意:正如您在上面的代码中所看到的,我需要这个条件才能触发警告日志。)

1 个答案:

答案 0 :(得分:0)

我将重新发布@ ClausIbsen的评论作为答案。声誉应该全部归@ClausIbsen所有。

Predicate添加到文件URI可以解决我的问题。

但是,我决定在我的代码中使用 from("timer://a-processor?period=" + timerPeriod) .routeId("ATimer") .choice() .when(exchange -> Files.exists(Paths.get(flagFileFolder, flagFileName))) .log(LoggingLevel.DEBUG, "Flag file exists.") .otherwise() .log(LoggingLevel.DEBUG, "Flag file does not exist.") .end();

balanceFrame.getContentPane().setBackgroundColor(Color.RED);

在我的情况下,我发现它在语义上更具可读性和更清晰。