문제

간단하게 달리고 싶어요 아파치 낙타 한 디렉토리에서 다른 디렉토리로 파일을 복사하는 예 :

CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {

  public void configure () throws Exception {
    from("file://c:/fromdir/").to("file://c:/todir/");
  } 
});
context.start();

Apache Camel 2.0.0을 사용 하여이 예제를 실행하면 프로그램이 즉시 종료됩니다. context.start(); 그리고 아무것도하지 않습니다. 내가 추가하면 Thread.sleep(30000); 시작 후 CamelContext, 배경 스레드는 작업을 수행하고 파일은 소스에서 대상 디렉토리로 30 초 동안 복사됩니다.

그러나 Apache Camel 1.6.2를 사용하여 동일한 코드를 실행하면 start() 메소드 블록이 자동으로 블록을 차지하며 파일을 복사하기 위해 기본 스레드를 잠들 필요가 없습니다. 이 동작이 낙타 1.x에서 2.x로 바뀌 었다는 힌트를 찾지 못했습니다. 이것이 실제로 의도 된 행동입니까? start () 메소드가 Camel 2.0.0에서 실행을 차단하게 할 수 있습니까?

감사

도움이 되었습니까?

해결책

예, 낙타 컨텍스트에서 시작 ()을 호출하면 스레드를 차단해서는 안됩니다. 그리고 낙타 2.0 의이 올바른 행동.

ctrl + c를 누르거나 camelcontext에서 call stop ()를 눌 때까지 차단 된 시작점으로 org.apache.camel.util의 Mainsupport 클래스를 사용할 수 있습니다.

예를 들어 메인지지를 확장하고 스프링 XML 파일에서 낙타를로드 할 수있는 Camel-Spring의 Main을 참조하십시오.

다른 팁

또는 추가 할 수 있습니다

Thread.currentThread().join();

context.start () 이후;

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top