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

Spring integration 4.3.12 - Is there a LastModifiedFileListFilter for SFTP?

我已经搜索了文档,但没有看到 SFTP 的 LastModifiedFileListFilter。

SFTP 确实没有这样的实现。

copy/paste 现有 LastModifiedFileListFilter 并为 LsEntry 及其 getAttrs().getMTime() 应用逻辑并不难。

有了我们的 SftpStreamingMessageSource,我什至开始认为我们需要为这样的 lastmodified 逻辑提供开箱即用的实现。

随时就此事提出 JIRA。

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

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;
    }

}