如何避免在Spring Integration中扫描或过滤特定目录?

时间:2014-09-24 08:56:02

标签: spring filter directory spring-integration

使用Spring集成,我想使用我的入站通道适配器扫描具有如下树结构的目录:

INDICATOR/
    ref_1/
        INPUTS/
        ERRORS/
    ref_2/
        INPUTS/
        ERRORS/

我的根目录将是INDICATOR我想以递归方式扫描所有目录并获取所有文件,将其放在ERRORS目录中。换句话说,如何拒绝避免扫描此特定目录?

是否可以实现此类org.springframework.integration.file.RecursiveLeafOnlyDirectoryScanner并添加特定的过滤器?

这是我的实际配置

<int-file:inbound-channel-adapter id="csvInputChannel"
    directory="file:${directory.input}"
    prevent-duplicates="false"
    auto-startup="true" 
    auto-create-directory="false" 
    queue-size="1"
    scanner="dirScanner">

    <int:poller max-messages-per-poll="1" default="true" fixed-rate="1000" receive-timeout="5000" />
</int-file:inbound-channel-adapter>

<bean id="dirScanner" 
    class="org.springframework.integration.file.RecursiveLeafOnlyDirectoryScanner" />

实际上,我只能递归扫描所有目录中的所有文件,我不知道如何添加过滤器。

提前感谢任何提示。

2 个答案:

答案 0 :(得分:2)

实际上,我并没有真正实现你自己的RecursiveLeafOnlyDirectoryScanner

public class SkipErrorDirRecursiveLeafOnlyDirectoryScanner extends RecursiveLeafOnlyDirectoryScanner {

   protected File[] listEligibleFiles(File directory) throws IllegalArgumentException {
       if (!"ERRORS".equals(directorygetName())) {
           return super.listEligibleFiles(directory);
       }
   }

}

答案 1 :(得分:0)

我找到了更好的方法,我只是扩展DefaultDirectoryScanner并使用此功能

public class SkipErrorDirRecursive extends DefaultDirectoryScanner{
    protected File[] listEligibleFiles(File directory) throws IllegalArgumentException {
        File[] rootFiles = directory.listFiles();
        List<File> files = new ArrayList<File>(rootFiles.length);
        for (File rootFile : rootFiles) {
            if (rootFile.isDirectory()) {
                if (!"ERRORS".equals(rootFile.getName()))
                    files.addAll(Arrays.asList(listEligibleFiles(rootFile)));
            }
            else {
                files.add(rootFile);
            }
        }
        return files.toArray(new File[files.size()]);
    }
}