如何跳过'过滤器'的设置和'储物柜'如果在带有XML Config的Spring Integration 4.2.0中使用自定义DirectoryScanner,则属性

时间:2015-09-15 10:00:19

标签: spring-integration

使用Spring Integration 4.2.0,它提到了' filter'和'储物柜'如果正在使用自定义扫描程序(https://jira.spring.io/browse/INT-3619),则必须存在。

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

e.g。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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设置为Documentation

我将JIRA转换为def poundsToMetricFunction(kilograms, grams): pounds = float(input("enter the amount of pounds: ") kilograms = pounds * 2.2 grams = kilograms * 1000 print('The amount of pounds you entered is ', pounds, ' This is ', kilograms, ' kilograms ', 'and', grams, 'grams' ) 只是为了更清楚这件事。