You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Apache Camel中如何判断Filter未匹配输入?

解决方案:记录未匹配任何Filter的文件

针对你的需求,有两种常用方式实现未匹配文件的日志记录:

方法一:使用choice() + otherwise()(推荐)

Camel的choice()结构天生适配多分支匹配场景,otherwise()会在所有when条件都不满足时触发,刚好对应“未匹配任何filter”的情况。改写后的路由代码如下:

@Override
public void configure() throws Exception {
    // @formatter:off
    from("file://data/inputdir")
        .log("Checking ${file:name}")
        .choice()
            .when(simple("${file:ext} == 'jpg'"))
                .to("file://data/outputidr/valid")
                .log("Processed in JPG! ${file:name}")
            .when(simple("${file:ext} == 'txt'"))
                .to("file://data/outputidr/validtxt")
                .log("Processed in TXT! ${file:name}")
            .otherwise()
                .log("${file:name} is not processed")
        .end()
    // @formatter:on
}

这种方式逻辑清晰,代码结构紧凑,避免了多个独立filter带来的流程分散问题。

方法二:通过属性标记处理状态

如果需要保留原有filter结构,可以通过设置Exchange属性标记文件是否被处理,最后根据属性值判断是否记录日志:

@Override
public void configure() throws Exception {
    // @formatter:off
    from("file://data/inputdir")
        .log("Checking ${file:name}")
        // 初始化标记:未处理
        .setProperty("isProcessed", constant(false))
        .filter(simple("${file:ext} == 'jpg'"))
                .to("file://data/outputidr/valid")
                .log("Processed in JPG! ${file:name}")
                .setProperty("isProcessed", constant(true))
        .end()
        .filter(simple("${file:ext} == 'txt'"))
                .to("file://data/outputidr/validtxt")
                .log("Processed in TXT! ${file:name}")
                .setProperty("isProcessed", constant(true))
        .end()
        // 判断是否未处理
        .filter(simple("${property.isProcessed} == false"))
                .log("${file:name} is not processed")
        .end()
    // @formatter:on
}

这种方式灵活性更高,适合后续需要扩展更多处理分支的场景。

内容的提问来源于stack exchange,提问作者watanayz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:29:59