Java can';是否在文件中设置其他筛选器:入站通道适配器和扫描仪?

Java can';是否在文件中设置其他筛选器:入站通道适配器和扫描仪?,java,spring-integration,Java,Spring Integration,下面是我的Spring集成配置的一部分: <bean id="recursiveScanner" class="org.springframework.integration.file.RecursiveLeafOnlyDirectoryScanner" > <property name="filter" ref="skipTmpFileFilter" /> </bean> <bean id="skipTmpFileFilter" class=

下面是我的Spring集成配置的一部分:

<bean id="recursiveScanner" class="org.springframework.integration.file.RecursiveLeafOnlyDirectoryScanner" >
    <property name="filter" ref="skipTmpFileFilter" />
</bean>

<bean id="skipTmpFileFilter" class="org.springframework.integration.file.filters.RegexPatternFileListFilter">
    <constructor-arg value="^[^~].*"/>
</bean>

<file:inbound-channel-adapter directory="${inbound.folder}"
                              scanner="recursiveScanner" 
                              id="fileChannel" 
                              filter="fileNameFilter">
    <integration:poller id="poller" fixed-delay="10000" />
</file:inbound-channel-adapter>

如您所见,我想定义两个不同的过滤器:

  • 一个用于跳过recursiveScanner中的临时文件
  • 还有一个更高级的模式,我在其中定义了一些其他模式,fileNameFilter(其中的细节不相关,所以我不提供)
当我在调试模式下启动它时,我看到的是,首先,在recursiveScanner中设置了skipTmpFileFilter,但稍后它会被fileNameFilter覆盖,使skipTmpFileFilter无效

这是预期行为还是bug?我认为能够配置两个不同的过滤器是有意义的,一个是通用的(在扫描仪中),另一个是更具体的(在入站适配器中)。在这里,我被迫使用复合过滤器

谢谢


Vincent

如果我们看一下
FileReadingMessageSource
的源代码,我们会看到:

public void setFilter(FileListFilter<File> filter) {
    Assert.notNull(filter, "'filter' must not be null");
    this.scanner.setFilter(filter);
}
public void setFilter(FileListFilter过滤器){
Assert.notNull(过滤器,“'filter'不能为null”);
this.scanner.setFilter(filter);
}
对于
文件读取消息源
,在
过滤器
周围没有更多的内容。一切都委托给
目录扫描程序

因此,没有任何选择,除非只提供一个
filter
选项:或者为
DirectoryScanner
bean,或者

是的:要设置多个过滤器,您应该使用
CompositeFileListFilter

然而,我认为我们可以保护覆盖案例的这一点


请随时就此事提出问题。

谢谢您的快速回答!吉拉创造了: