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

Spring integration 如何跳过设置';过滤器';和';储物柜';属性,如果在带有XML配置的Spring Integration 4.2.0中使用自定义DirectoryScanner,spring-integration,Spring Integration,对于SpringIntegration4.2.0,它提到如果使用自定义扫描仪,则必须存在“过滤器”和“锁定器”() 如果我简单地重写listEligibleFiles()方法并使用DefaultDirectoryScanner提供的默认过滤器,我不知道如何使用XML config设置此选项 e、 g //使用默认过滤器 公共类MyDirectoryScanner扩展了DefaultDirectoryScanner{ @凌驾 受保护文件[]ListLigibleFiles(文件目录)引发Illeg

对于SpringIntegration4.2.0,它提到如果使用自定义扫描仪,则必须存在“过滤器”和“锁定器”()

如果我简单地重写
listEligibleFiles()
方法并使用
DefaultDirectoryScanner
提供的默认过滤器,我不知道如何使用XML config设置此选项

e、 g

//使用默认过滤器
公共类MyDirectoryScanner扩展了DefaultDirectoryScanner{
@凌驾
受保护文件[]ListLigibleFiles(文件目录)引发IllegalArgumentException{
返回super.listEligibleFiles(目录);
}
}

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

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

使用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);
}
通过以下方式,
DefaultDirectoryScanner
上的
过滤器可以设置为
null


我正在将文档转换为
文档
,只是为了更清楚地说明这一点。

如果我只是扩展DefaultDirectoryScanner类,并且仅出于我自己的目的重写ListLigibleFiles()。它应该通过DefaultDirectoryScanner()默认构造函数使用默认的IgnoreHiddenFileListFilter和AcceptOnceFileListFilter。i、 我不需要显式设置过滤器属性。但是,我仍然得到异常java.lang.IllegalStateException:提供的外部“扫描仪”上必须存在“过滤器”和“锁定器”选项。这就是为什么我问我是否需要通过NamespaceWith4.2执行sthg else,如果您注入自定义扫描仪,您必须自己在该对象上设置过滤器和锁定器;不再允许您使用命名空间属性。以前,名称空间错误地重写了任何此类属性。框架不知道覆盖是否“正常”,因此我们在谨慎方面犯了错误。这不是一个bug,而是一个计划中的行为更改,用于修复错误覆盖用户设置的问题。请参阅。很抱歉,我仍然对迁移到SI 4.2.0有疑问。现在,我已经删除了文件入站适配器中的“防止重复”属性,并且过滤器由扫描仪本身控制。但是,AcceptOnceFileListFilter仍然是由文件入站适配器在内部隐式创建的。这意味着即使扫描程序没有AcceptOnceFileListFilter,但文件入站适配器仍会过滤掉重复的消息。如果无法使用“防止重复”属性,如何在文件入站适配器中禁用AcceptOnceFileListFilter?现在这是一个bug。我开了一家商店。
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);
}
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);