我已经搜索了文档,但看不到用于SFTP的LastModifiedFileListFilter。
答案 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;
}
}