无法在文件中设置不同的过滤器:入站通道适配器和扫描仪?

时间:2015-01-22 11:33:17

标签: java spring-integration

以下是我的Spring Integration配置的一部分:

<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>

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

  • 一个跳过临时文件,在recursiveScanner
  • 一个更先进的,我已经定义了一些其他模式,fileNameFilter(其中的细节不相关,所以我不提供它)

我在调试模式下启动时看到的是,首先,在recursiveScanner中设置skipTmpFileFilter,但是稍后由fileNameFilter覆盖,使skipTmpFileFilter无效。

是预期的行为还是错误?我认为能够配置2个不同的过滤器是有意义的,一个是通用的(在扫描仪中),另一个是特定的(在入站适配器中)。在这里,我有点被迫使用复合滤波器。

由于

文森特

1 个答案:

答案 0 :(得分:0)

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

public void setFilter(FileListFilter<File> filter) {
    Assert.notNull(filter, "'filter' must not be null");
    this.scanner.setFilter(filter);
}

filter FileReadingMessageSource附近没有其他内容。所有内容都委托给DirectoryScanner

所以,没有任何选择,除非只提供一个filter选项:或DirectoryScanner bean或<file:inbound-channel-adapter>

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

但我认为我们可以保护覆盖案例的那一点。

随意提出JIRA问题。