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

移除AcceptOnceFileListFilter缓存后,File input adapter仍不处理同名文件

问题排查与修复方案

几个优先排查的点

  • 过滤器实例是否为同一个?
    你通过@Autowired注入的AcceptOnceFileListFilter,和ChainFileListFilter内部引用的可能是两个独立实例!如果清理的是外部注入实例的缓存,而过滤器链里的实例缓存没动,同名文件自然会被持续拦截。
    验证方式:打印两个实例的hashCode,若数值不同,说明XML配置ChainFileListFilter时,你没有引用全局的AcceptOnceFileListFilter Bean,而是重新定义了新的实例,导致缓存不共享。

  • 前序过滤器是否拦截了新文件?
    别只盯着AcceptOnceFileListFilter,先确认新文件能通过RegexPatternFileListFilter——比如正则表达式是否匹配新文件的后缀、文件名?是否被你提到的第一个过滤器(疑似笔误,如自定义过滤器)拦截?
    验证方式:给每个过滤器添加日志,打印每次过滤后的文件列表,看新文件是否能走到AcceptOnceFileListFilter这一步。

  • 文件对象的标识是否一致?
    AcceptOnceFileListFilter依赖File的equals和hashCode识别文件,你清理缓存用的File对象,和过滤器中存储的可能不是同一标识——比如新文件同名但路径不同,或你用相对路径创建对象、过滤器存储的是绝对路径实例。
    验证方式:打印文件的getAbsolutePath()和lastModified(),确认两次处理的是同一标识的文件。

修复步骤

  • 强制过滤器实例共享
    XML配置中必须让ChainFileListFilter引用全局的AcceptOnceFileListFilter Bean,禁止重复定义。示例:

    <!-- 定义全局唯一的AcceptOnce Bean -->
    <bean id="acceptOnceFilter" class="org.springframework.integration.file.filters.AcceptOnceFileListFilter"/>
    
    <!-- 过滤器链中直接引用该Bean -->
    <bean id="chainFilter" class="org.springframework.integration.file.filters.ChainFileListFilter">
        <property name="filters">
            <list>
                <ref bean="yourFirstFilter"/> <!-- 你的第一个过滤器 -->
                <ref bean="regexPatternFilter"/> <!-- 正则过滤器 -->
                <ref bean="acceptOnceFilter"/> <!-- 引用全局实例,禁止重新定义 -->
            </list>
        </property>
    </bean>
    

    这样注入的acceptOnceFilter和过滤器链内的实例完全一致,清理缓存才会生效。

  • 修正缓存清理逻辑
    避免随意传递File对象调用remove,建议用绝对路径创建File实例,保证与过滤器内存储的标识完全匹配:

    File targetFile = new File(file.getAbsolutePath());
    acceptOnceFilter.remove(targetFile);
    

    若业务允许,直接调用acceptOnceFilter.clear()清空整个缓存,操作更稳妥。

  • 刷新文件读取源配置
    如果你使用FileReadingMessageSource,它可能会缓存过滤结果。清理完过滤器缓存后,需刷新源配置:

    fileReadingMessageSource.setFileListFilter(chainFilter);
    fileReadingMessageSource.afterPropertiesSet();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:20:07