Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring集成LastModifiedFileListFilter不工作_Java_Spring_Spring Integration - Fatal编程技术网

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提示。现在算法更加有效。