2013-01-05 4 views
2

SI sample을 테스트 중이며 다음과 같은 문제가 발생합니다.스프링 통합 파일 - 쓰기 전에 인바운드 채널 어댑터로 파일 읽기

내 SI는 버전-1.0.4

쉽게 이해를 위해 내가 아래 내용을 붙여 오전 :

fileCopyDemo-text.xml

<file:inbound-channel-adapter id="filesIn" 
            directory="file:${java.io.tmpdir}/spring-integration-samples/input" filename-pattern=".*\.xml"> 
     <integration:poller id="poller" > 
      <integration:interval-trigger initial-delay="1000" interval="2000" fixed-rate="true"/> 
     </integration:poller> 
    </file:inbound-channel-adapter> 

    <integration:service-activator input-channel="filesIn" 
            output-channel="filesOut" 
            ref="handler"/> 

    <file:outbound-channel-adapter id="filesOut" 
            directory="file:${java.io.tmpdir}/spring-integration-samples/output" 
            delete-source-files="true"/> 

    <bean id="handler" class="org.springframework.integration.samples.filecopy.Handler"/> 

FileBasedCopyTest.java

public class FileBasedFileCopyTest { 

    public static void main(String[] args) 
    { 
     ApplicationContext ac = new ClassPathXmlApplicationContext("/META-INF/spring/integration/fileCopyDemo-file.xml"); 
    } 
} 

Handler.java

public class Handler { 

    public File handleFile(File input) { 
     System.out.println("Copying file: " + input.getAbsolutePath()); 
     return input; 
    } 
} 

나는 입력 폴더에 파일을 생성하는 다른 자바 클래스가 있습니다.

Sample.java

public static void main(String[] args) { 

    try { 
     String str = "SomeMoreTextIsHere"; 
     File newTextFile = new File("C:/Windows/Temp/spring-integration-samples/input/thetextfile.xml"); 

     FileWriter fw = new FileWriter(newTextFile); 
     fw.write(str); 
     fw.close(); 

    } catch (IOException iox) { 
     iox.printStackTrace(); 
    } 
} 

은 내가 FileBasedCopyTest을 실행하고 지금 입력 폴더 듣고있다.

질문 내가 디버그 모드에서 Sample.java 파일과 momemt

FileWriter FW = 새로운 FileWriter (newTextFile)를 실행하고;

실행됩니다. Handler.java에서 컨트롤을 받고 있습니다. 일단 파일이 닫히면 이상적으로 컨트롤을 받고 싶습니다. 이 시나리오를 어떻게 처리할까요?

추신 : 나는 this을 읽었지만이 경우 처리 방법은 확실하지 않습니다.

답변

3

이것은 스프링 통합을 사용하는지 여부에 관계없이 일반적인 문제입니다.

아웃 바운드 어댑터에서 SI가 사용하는 일반적인 접근 방식은 임시 이름 (예 : foo.txt.writing)으로 파일을 작성한 다음 쓰기 후 foo.txt으로 이름을 바꿉니다.

+0

참고 : 1.0.4는 매우 오래되었습니다. 현재 릴리스는 2.2.0.RELEASE입니다. –

+0

불행히도 내 스프링이 v2.5.6이고 현재는 3.x로 업그레이드 할 대역폭이 없기 때문에 나는 그것에 매달렸습니다. 대체 접근 방식에 대해 감사드립니다. – Mahendran

관련 문제