파일 어댑터 구성봄 통합 (5.0) - 파일 어댑터 : 사용자 정의 스캐너에 방지 - 중복을 활성화하면 작동하지 않습니다
<int-file:inbound-channel-adapter
directory="/app/download/client/"
id="clientFileAdapter"
channel="channelOne"
scanner="myFileScanner" prevent-duplicates="true">
<int:poller fixed-delay="1000" max-messages-per-poll="1"/>
</int-file:inbound-channel-adapter>
MyFileScanner.class
@Component("myFileScanner")
public class MyFileScanner implements DirectoryScanner {
@Autotwired
private MyFileFilter myFileFilter;
@Override
public List<File> listFiles(File file)throws IllegalArgumentException{
File[] files = listEligibleFiles(file);
if(files==null){
throw new MessagingException("The path is not valid");
}
if(this.myFileFilter!=null){
return this.myFilter.filterFiles(files);
}
else{
return Arrays.asList(files);
}
}
//Other override methods
protected File[] listEligibleFiles(File directory){
File[] rootFiles = directory.listFiles();
ArrayList files = new ArrayList(rootFiles.length);
for(File rootFile:rootFiles){
if(rootFile.isDirectory()){
files.addAll(Arrays.asList(this.listEligibleFiles(rootFile));
}
else{
files.add(rootFile);
}
}
return (File[])files.toArray(new File[files.size()]);
}
}
MyFileFilter.class
@Component("myFileFilter")
public class MyFileFilter implements FileListFilter<File>{
@Override
public List<File> filterFiles(File[] files){
ArrayList accepted = new ArrayList();
if(files != null){
for(File f: files){
if(f.getName.endsWith(".DAT"))
accepted.add(f);
}
}
return accepted;
}
}
문제 :
파일 어댑터 구성에서 prevent-duplicates 플래그가 제거되면 코드는 제대로 작동하지만 동일한 파일이 반복해서 선택됩니다. 방지] - 중복 플래그가 존재하면
, 그것은 오류 '필터'및 '로커'옵션 본 N 제공된 외부 "스캐너"이어야 발생 : 스프링을 통해 5.0 문서를 읽은 후에
을 얻은 정보 아래.
외부 스캐너의 경우 FileReadingMessageSource에서 모든 필터 및 로커 속성을 금지합니다. 해당 사용자 정의 DirectoryScanner에서 (필요한 경우) 지정해야합니다. 즉, FileReadingMessageSource에 스캐너를 삽입하는 경우 FileReadingMessageSource가 아닌 해당 스캐너에서 필터와 라커를 제공해야합니다.
사용자 정의 스캐너를 사용할 때 같은 파일을 다시 선택하지 않도록 방지 방지 플래그 또는 사용자 지정 구현을 설정하는 방법에 대한 제안을 제공하십시오.
파일 메타 데이터 (이름 및 파일 생성 타임 스탬프 등)를 캐시하고 중복 파일을 결정하기 위해 파일을 어댑터에서 가져올 때마다 내 필터 클래스에서 비교할 때 응용 프로그램을 사용해야합니까?
감사합니다. !! 효과가있다. – Selva