Spring集成4.3.12-是否有用于SFTP的LastModifiedFileListFilter?

时间:2018-07-09 15:52:55

标签: spring spring-integration spring-integration-sftp

我已经搜索了文档,但看不到用于SFTP的LastModifiedFileListFilter。

2 个答案:

答案 0 :(得分:1)

SFTP确实没有这样的实现。

复制/粘贴现有​​的LastModifiedFileListFilter并为LsEntry及其getAttrs().getMTime()应用逻辑并不难。

借助SftpStreamingMessageSource,我什至开始思考我们需要为这种lastmodified逻辑提供开箱即用的实现。

随时提出此事的JIRA。

答案 1 :(得分:0)

这可能会对某人有所帮助,所以这是我的过滤器:

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.integration.file.filters.FileListFilter;
import com.jcraft.jsch.ChannelSftp.LsEntry;

public class LastModifiedLsEntryFileListFilter implements FileListFilter<LsEntry> {

    private final Logger log = LoggerFactory.getLogger(LastModifiedLsEntryFileListFilter.class);
    private static final long DEFAULT_AGE = 60;

    private volatile long age = DEFAULT_AGE;

    public long getAge() {
        return this.age;
    }

    public void setAge(long age) {
        setAge(age, TimeUnit.SECONDS);
    }

    public void setAge(long age, TimeUnit unit) {
        this.age = unit.toSeconds(age);
    }

    @Override
    public List<LsEntry> filterFiles(LsEntry[] files) {

        List<LsEntry> list = new ArrayList<LsEntry>();

        long now = System.currentTimeMillis() / 1000;

        for (LsEntry file : files) {

            if (file.getAttrs()
                    .isDir()) {
                continue;
            }

            int lastModifiedTime = file.getAttrs()
                .getMTime();

            if (lastModifiedTime + this.age <= now) {
                list.add(file);
            } else {
                log.info("File [{}] is still being uploaded...", file.getFilename());
            }
        }
        return list;
    }

}