在 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>
不清楚你的意思; 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);
}
因此,如果您不想使用
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
只是为了更清楚地了解此事。