CamelContext.start ()는 차단되지 않습니다
-
12-09-2019 - |
문제
간단하게 달리고 싶어요 아파치 낙타 한 디렉토리에서 다른 디렉토리로 파일을 복사하는 예 :
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 () 이후;