如果在带有 XML Config 的 Spring Integration 4.2.0 中使用自定义 DirectoryScanner,如何跳过“filter”和“locker”属性的设置

问题描述 投票:0回答:2

在 Spring Integration 4.2.0 中,它提到如果使用自定义扫描仪,则必须存在“filter”和“locker”(https://github.com/spring-projects/spring-integration/issues/7545 以前) INT-3619)。

如果我只是重写

listEligibleFiles()
方法并使用
DefaultDirectoryScanner
提供的默认过滤器,我不知道如何使用 XML 配置进行设置。

例如

// using the default filters
public class MyDirectoryScanner extends DefaultDirectoryScanner {
    @Override
    protected File[] listEligibleFiles(File directory) throws IllegalArgumentException {
        return super.listEligibleFiles(directory);
    }
}

<bean id="myCustomScanner"
      class="com.company.MyDirectoryScanner" />

<int-file:inbound-channel-adapter directory="my_directory"
                                  prevent-duplicates="true"
                                  scanner="myCustomScanner"
                                  channel="myChannel">
    <int:poller fixed-rate="10"
                time-unit="SECONDS" max-messages-per-poll="5" />
</int-file:inbound-channel-adapter>
spring-integration
2个回答
0
投票

不清楚你的意思; JIRA 旨在修复这些属性被错误覆盖的错误。

注入自定义扫描仪时,您需要在扫描仪上设置这些属性,而不是通过命名空间。


0
投票

使用 DefaultDirectoryScanner 提供的默认过滤器。

DefaultDirectoryScanner
有代码:

public DefaultDirectoryScanner() {
    final List<FileListFilter<File>> defaultFilters = new ArrayList<FileListFilter<File>>(2);
    defaultFilters.add(new IgnoreHiddenFileListFilter());
    defaultFilters.add(new AcceptOnceFileListFilter<File>());
    this.filter = new CompositeFileListFilter<File>(defaultFilters);
}

因此,如果您不想使用

AcceptOnceFileListFilter
(或任何其他默认值),您应该遵循文档的建议并使用
setFilter()
合约的
DirectoryScanner
。为此,有
FileListFilterFactoryBean
,其中
setPreventDuplicates()
设置为
false

是的,请从您的配置中删除

prevent-duplicates="true"
,因为在使用
scanner
时这是被禁止的:

Assert.state(!(this.scannerExplicitlySet && (this.filter != null || this.locker != null)),
            "The 'filter' and 'locker' options must be present on the provided external 'scanner': "
                    + this.scanner);

顺便说一句,

filter
可以设置为
null
上的
DefaultDirectoryScanner
...

我将 JIRA 转换为

Documentation
只是为了更清楚地了解此事。

© www.soinside.com 2019 - 2024. All rights reserved.