Java Spring集成LastModifiedFileListFilter不工作
我试图从目录中读取一些文件,但在检测文件和处理文件之间有延迟。 我有一个生成器模式:Java Spring集成LastModifiedFileListFilter不工作,java,spring,spring-integration,Java,Spring,Spring Integration,我试图从目录中读取一些文件,但在检测文件和处理文件之间有延迟。 我有一个生成器模式: /** * The build function that will create a CompositeFileListFilter with the given filters * * @return {@link CompositeFileListFilter} that contains all the filters added */ public CompositeFileListFilt
/**
* The build function that will create a CompositeFileListFilter with the given filters
*
* @return {@link CompositeFileListFilter} that contains all the filters added
*/
public CompositeFileListFilter<File> build() {
CompositeFileListFilter<File> compositeFileListFilter = new CompositeFileListFilter<>();
boolean existsFilters = false;
// Add the prevent duplicates filter
if (this.preventDuplicates) {
compositeFileListFilter.addFilter(new AcceptOnceFileListFilter<File>());
existsFilters = true;
} else {
compositeFileListFilter.addFilter(new AcceptAllFileListFilter<File>());
existsFilters = true;
}
// Add the ignore hidden filter
if (this.ignoreHidden) {
compositeFileListFilter.addFilter(new IgnoreHiddenFileListFilter());
existsFilters = true;
} // Add the pattern file name filter
if (this.patternFilter != null) {
compositeFileListFilter.addFilter(new SimplePatternFileListFilter(patternFilter));
existsFilters = true;
}
// Add the process file after a period of time filter
if (this.lastModifiedFileListFilterAge > 0) {
LastModifiedFileListFilter filter = new LastModifiedFileListFilter();
filter.setAge(lastModifiedFileListFilterAge);
compositeFileListFilter.addFilter(filter);
existsFilters = true;
}
// Check if compositeFileListFilter contains any filter
if (!existsFilters) {
throw new IllegalStateException("At least one filter should be provided!");
}
return compositeFileListFilter;
}
/**
*将使用给定筛选器创建CompositeFileListFilter的生成函数
*
*@return{@link CompositeFileListFilter},其中包含添加的所有筛选器
*/
公共CompositeFileListFilter生成(){
CompositeFileListFilter CompositeFileListFilter=新的CompositeFileListFilter();
布尔existsFilters=false;
//添加“防止重复”筛选器
如果(本文件重复){
addFilter(新的AcceptOnceFileListFilter());
existsFilters=true;
}否则{
addFilter(新的AcceptAllFileListFilter());
existsFilters=true;
}
//添加忽略隐藏过滤器
if(this.ignoreHidden){
addFilter(新的IgnoreHiddenFileListFilter());
existsFilters=true;
}//添加模式文件名筛选器
if(this.patternFilter!=null){
addFilter(新的SimplePatternFileListFilter(patternFilter));
existsFilters=true;
}
//在过滤一段时间后添加流程文件
如果(this.lastModifiedFileListFilterAge>0){
LastModifiedFileListFilter=新的LastModifiedFileListFilter();
filter.setAge(lastModifiedFileListFilterAge);
compositeFileListFilter.addFilter(过滤器);
existsFilters=true;
}
//检查compositeFileListFilter是否包含任何筛选器
如果(!existsFilters){
抛出新的IllegalStateException(“应至少提供一个筛选器!”);
}
返回compositeFileListFilter;
}
我正在创建这样的过滤器
CompositeFileListFilter<File> filters = new IntegrationFlowFileFilterBuilder()
.ignoreHidden(true)
.preventDuplicates(false)
.patternFilter(returnInformationInputFolderSetup.getPatternFolder())
.lastModifiedFileListFilterAge(120)
.build();
CompositeFileListFilter过滤器=新的IntegrationFlowFileFilterBuilder()
.ignoreHidden(true)
.防止重复(错误)
.patternFilter(returnInformationInputFolderSetup.getPatternFolder())
.lastModifiedFileListFilterAge(120)
.build();
问题是所有其他筛选器都在工作,只有LastModifiedFileList筛选器不工作。。我正在读取一个文件,在不到一秒钟的时间内就完成了处理。有人知道这个过滤器为什么不工作吗?我刚刚用以下工具测试了您的用例:
@Test
public void testLastModifiedInComposite() throws IOException {
CompositeFileListFilter<File> compositeFileListFilter = new CompositeFileListFilter<>();
compositeFileListFilter.addFilter(new AcceptAllFileListFilter<>());
compositeFileListFilter.addFilter(new IgnoreHiddenFileListFilter());
compositeFileListFilter.addFilter(new SimplePatternFileListFilter("*.foo"));
compositeFileListFilter.addFilter(new LastModifiedFileListFilter(120));
given(this.fileMock.getName())
.willReturn("test.foo");
given(this.fileMock.lastModified())
.willReturn(System.currentTimeMillis());
List<File> filteredFiles = compositeFileListFilter.filterFiles(new File[] { this.fileMock });
assertTrue(filteredFiles.isEmpty());
compositeFileListFilter.close();
}
@测试
public void testLastModifiedInComposite()引发IOException{
CompositeFileListFilter CompositeFileListFilter=新的CompositeFileListFilter();
addFilter(新的AcceptAllFileListFilter());
addFilter(新的IgnoreHiddenFileListFilter());
addFilter(新的SimplePatternFileListFilter(“*.foo”);
addFilter(新的LastModifiedFileListFilter(120));
给定(this.fileMock.getName())
.willReturn(“test.foo”);
给定(this.fileMock.lastModified())
.willReturn(System.currentTimeMillis());
List filteredFiles=compositeFileListFilter.filterFiles(新文件[]{this.fileMock});
assertTrue(filteredFiles.isEmpty());
compositeFileListFilter.close();
}
请注意,我为lastmodified
指定了当前时间,而该文件实际上没有路径LastModifiedFileListFilter
。因此,我得到一个空结果。只是因为我的文件太小,无法被LastModifiedFileListFilter
接受
我建议您调试CompositeFileListFilter.filterFiles()
方法,以确定实际情况
还请注意,对于过滤功能,有一个链式文件列表过滤器
,从不同的角度来看:
谢谢你的帮助。问题是我复制了轮询文件夹中的文件。文件的时间超过120秒,LastModifiedFileListFilter检查文件的上次修改时间。不管怎样,谢谢你的ChainFileListFilter提示。现在算法更加有效。