gpt4 book ai didi

java - 无法在文件 :inbound-channel-adapter and scanner? 中设置不同的过滤器

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:51 26 4
gpt4 key购买 nike

下面是我的 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(其详细信息不相关,因此我不提供它)

当我在 Debug模式下启动它时,我看到的是,首先,在recursiveScanner中设置了skipTmpFileFilter,但稍后它被fileNameFilter覆盖,使得skipTmpFileFilter无效。

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

谢谢

文森特

最佳答案

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

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

filter 周围没有更多的东西了对于FileReadingMessageSource 。一切都委托(delegate)给DirectoryScanner .

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

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

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

欢迎筹集JIRA关于此事的问题。

关于java - 无法在文件 :inbound-channel-adapter and scanner? 中设置不同的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28087753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com