以下是我的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中设置skipTmpFileFilter,但是稍后由fileNameFilter覆盖,使skipTmpFileFilter无效。
是预期的行为还是错误?我认为能够配置2个不同的过滤器是有意义的,一个是通用的(在扫描仪中),另一个是特定的(在入站适配器中)。在这里,我有点被迫使用复合滤波器。
由于
文森特
答案 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问题。