ftp가 우리 서버에 파일을 가지고있는 고객이 있습니다. 이 디렉토리에서 특정 파일을 선택하고 처리 할 다른 디렉토리로 이동하도록 경로를 정의했습니다. 문제는 ftp가 완료 될 때까지 기다리는 것이 아니라 즉시 확인하는 것입니다. 결과는 uri에 설명 된 경로의 0 바이트 파일입니다. 나는 각 readLock 옵션 (masterFile, rename, changed, fileLock)을 시도했지만 아무 것도 작동하지 않았다. 나는 내 낙타 경로를 정의하기 위해 봄 DSL을 사용하고있다. 다음은 작동하지 않는 예입니다. 낙타 버전은 2.10.0입니다.ftp가 완료되기 전에 낙타 경로 파일을 가져옵니다.
<route>
<from uri="file:pathName?initialDelay=10s&move=ARCHIVE&sortBy=ignoreCase:file:name&readLock=fileLock&readLockCheckInterval=5000&readLockTimeout=10m&filter=#FileFilter" />
<to uri="file:pathName/newDirectory/" />
</route>
아무 도움이됩니다. 감사!
참고로 ... 한 번에이 경로가 다른 서버에서 실행 중이므로 파일을 처리 한 다른 서버로 파일을 ftp해야했습니다. 낙타에서 ftp 구성 요소를 사용할 때 경로가 올바르게 작동했습니다. 그것은 ftp를하기 전에 파일이 수신 될 때까지 기다렸습니다. 나는 나의 노선에 동일한 옵션을 정의했다. 그 이유는 내가 ftp 구성 요소가 낙타의 파일 구성 요소 옵션을 사용하기 때문에 그것을 할 방법이 있어야한다고 생각하는 이유입니다.
나는 PeteH의 제안 # 2을 취하고 다음을 수행했습니다. 나는 아직도 다른 방법이 있기를 바라고 있지만 이것은 효과가있다.
나는 나에게 current.minus (x 초)의 날짜 초기 필터링에 해당하는 경우public static Date getDateMinusSeconds(Integer seconds) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, seconds);
return cal.getTime();
}
그런 다음 내 필터 내에서 내가 확인을 반환하는 다음과 같은 방법을 추가했습니다. 그것이 나는 마지막 수정 날짜를 getDateMinusSeconds()와 비교합니다. 비교가 true이면 필터에 대해 false를 반환합니다.
if(filter){
if(new Date(pathname.getLastModified()).after(DateUtil.getDateMinusSeconds(-30))){
return false;
}
}
readLock = 변경되지 않았으며 readLockCheckInterval과 readLockTimeout도 같은 일을합니까? –
사실입니다. @Ken. readlock = change에 대한 코드를 살펴 봤지만 당시에는 정상적으로 작동하는 것처럼 보였지만 어떤 이유로 작동하지 않는지 기억합니다. thereadLockCheckInterval을 조정하려했는지 기억하지 못합니다. 나는 내가 그랬다고 생각했을 것이다. – Curt
아래에 나와있는 다른 의견에서 언급 한 내용 때문에이 문제를 해결했습니다. – Curt