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;
}
}
我已经搜索了文档,但没有看到 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;
}
}