无法在 file:inbound-channel-adapter 和扫描仪中设置不同的过滤器?
can't set a different filter in file:inbound-channel-adapter and scanner?
以下是我的 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>
如您所见,我想定义 2 个不同的过滤器:
- 一个跳过临时文件,在 recursiveScanner
- 一个更高级的,我定义了一些其他模式,fileNameFilter(细节不相关,所以我没有提供)
我在调试模式下启动它时看到的是,首先,skipTmpFileFilter 在 recursiveScanner 中设置,但稍后它被 fileNameFilter 覆盖,使 skipTmpFileFilter 无效。
这是预期的行为还是错误?我认为能够配置 2 种不同的过滤器是有意义的,一种是通用的(在扫描仪中),另一种是更具体的(在入站适配器中)。在这里,我有点被迫使用复合过滤器。
谢谢
文森特
如果我们看一下 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
。
不过我认为我们可以保护 override 案例的那一点。
随时提出 JIRA 问题。
以下是我的 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>
如您所见,我想定义 2 个不同的过滤器:
- 一个跳过临时文件,在 recursiveScanner
- 一个更高级的,我定义了一些其他模式,fileNameFilter(细节不相关,所以我没有提供)
我在调试模式下启动它时看到的是,首先,skipTmpFileFilter 在 recursiveScanner 中设置,但稍后它被 fileNameFilter 覆盖,使 skipTmpFileFilter 无效。
这是预期的行为还是错误?我认为能够配置 2 种不同的过滤器是有意义的,一种是通用的(在扫描仪中),另一种是更具体的(在入站适配器中)。在这里,我有点被迫使用复合过滤器。
谢谢
文森特
如果我们看一下 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
。
不过我认为我们可以保护 override 案例的那一点。
随时提出 JIRA 问题。