유스 케이스 : 파일 디렉토리를 듣고 싶고 누군가 파일을 변경할 때마다 프로세스를 시작하려고합니다.
이것은 지금까지 내 구성입니다.
<int-file:inbound-channel-adapter directory="${dir}" auto-startup="${auto.startup}" prevent-duplicates="true" filter="inputfilefilter" channel=rulesChannel">
<int:poller fixed-delay="${delay}" />
</int-file:inbound-channel-adapter>
여기서 inputFileFilter는 사용자 정의 Bean이고 rulesChannel은 나중에 처리됩니다.
inputFileFilter는 파일 배열을 가져와 파일 끝에 정렬 된 파일 목록을 반환합니다. 이것은 끝없이 당기는 것처럼 보이며 "중복 방지"검사는 필터 후에 수행됩니다 (예 : 파일이 추가되었지만 rulesChannel로 전송되지 않은 것 같습니다).
어쨌든 내 문제는 새 파일이 아닌 파일 변경 사항 을 선택하는 데이 모든 것이 필요하다는 것 입니다. 주로 때때로 변경되는 구성 파일이며 동기화 상태를 유지하려면 업데이트해야합니다.
예, 이것은 전체적으로 끔찍한 해결책이지만 실제로는 제 부름이 아니며 선택의 여지가없는 것 같습니다.
좋은 아이디어가 있습니까?
편집 : 나는 http://docs.spring.io/spring-integration/reference/html/files.html#_watchservicedirectoryscanner 로 약간 놀아서 클래스를 복사하고 StandardWatchEventKinds.ENTRY_MODIFY와 함께 사용할 수 있는지 확인했지만 도움이되지 않는 것 같습니다.
기본적으로 "스레드를 시작하고 계속 실행"하는 좋은 방법이 있었다면 나도 괜찮을 것입니다.
내가해야 할 일은 나만의 DefaultDirectoryScanner를 구현하는 것이 었습니다.
시작시 감시자를 등록하고 listEligibleItems (..)를 통해 인바운드 채널 어댑터로부터 요청을 수신하면 감시자를 확인합니다.
두 개의 개별 파일 디렉토리를 처리 할 수 있도록 두 개의 다른 감시자와 두 개의 다른 파일 폴러를 추가했습니다. 이것은 주로 코드의 가독성을 보장하고 인바운드 채널 어댑터의 "디렉토리"부분을 해킹하지 않도록하기위한 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다