2017-11-09 8 views
0

스프링 부트를 사용하여 Camel 테스트를 작성하고 있습니다. 다음은 내가 낙타가 시작되어서는 안 기대 테스트 클래스스프링 부트 카멜 테스트

@RunWith(CamelSpringBootRunner.class) 
@SpringBootApplication 
@ComponentScan(basePackages = ["example.test"]) 
@UseAdviceWith 
@BootstrapWith(SpringBootTestContextBootstrapper) 
@DirtiesContext 
class RouteTest { 

    private static final Logger LOGGER = LoggerFactory.getLogger(RouteTest.class) 

    @Autowired ModelCamelContext camelContext 

    @Test 
    void "flow"() { 
    camelContext.getRouteDefinition(route.routeId).adviceWith(camelContext, new AdviceWithRouteBuilder() { 
     @Override 
     void configure() throws Exception { 
     } 
    } 
    LOGGER.info("IN TEST: ******* Camel Status: "+camelContext.getStatus()) 
    } 

에 구성입니다. 그러나 테스트를 실행할 때 이미 시작되었습니다.

CamelSpringBootRunner가 CamelSpringBootExecutionListener에서 낙타 컨텍스트를 시작한다는 사실을 확인했습니다.

강제로 낙타 상황을 시작하지 마십시오.

+0

너 사용하니? –

+0

Camel 2.20.0 최신 버전을 사용 중입니다. 그러나 벌레가 이미보고되었습니다. [CAMEL-11955] (https://issues.apache.org/jira/browse/CAMEL-11955) – AMK

+0

Camel 2.20.1을 사용하여 문제가 해결됨 – AMK

답변

0

이 문제를 해결 낙타의 버전은 무엇

0

낙타의 최신 버전에는 낙타의 autoStartup 옵션이 있습니다. autoStartup 옵션을 추가하여 원하는 것을 얻을 수 있습니다. 예를 들어 아래의 경로는 autoStartup = false로 설정되어 Cam 시작시 Spring이 시작되는 것을 방지합니다. 아래 그림과 같이

<camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring" autoStartup="false"> 
    <route> 
     <from uri="direct:start"/> 
     <to uri="mock:result"/> 
    </route> 
</camelContext> 

당신은 수동으로 시작 메소드를 호출 해 나중에 낙타를 시작할 수 있습니다

ApplicationContext ac = ... 
SpringCamelContext camel = (SpringCamelContext) ac.getBean("myCamel"); 

// now start Camel manually 
camel.start(); 
+0

autoStartup을 false로 설정했지만 CamelSpringBootExecutionListener가이 자동 시작 플래그를 고려하지 않습니다. . 컨텍스트를 시작합니다. – AMK

+0

어떤 버전의 낙타를 사용합니까 ??? – NitKrish

+0

Camel-2.20.0에서 제기 된 버그 [CAMEL-11955] (https://issues.apache.org/jira/browse/CAMEL-11955) – AMK

0

당신이 낙타의 이전 버전을 사용하는 경우 다음 autoStartup 옵션 대신 shouldStartContext를 사용하려고 작동하지 않습니다. shouldStartContext를 설정 한 후 때로는 낙타를 시작하기 때문에 아래의 예에서 해결 방법을 사용하고 있습니다. 이 시도 :

설정 shouldStartContext 수동으로 코드에서 컨텍스트를 시작하기 전에 :

예 컨텍스트
((SpringCamelContext)camelContext).setShouldStartContext(true); 
camelContext.start(); 

: 낙타 2.20.1를 사용

<camel:camelContext id="ids.camel.context" shouldStartContext="false"> 

     <!-- Queue endpoints. --> 
     <camel:endpoint id="defaultInQueue" uri="jms:queue:${default.in.queue.name}"/> 
     <camel:endpoint id="defaultOutQueue" uri="jms:queue:${default.out.queue.name}"/>     

     <!-- Route to send messages to IDS --> 
     <camel:route id="out" trace="true"> 
      <camel:from uri="direct:sender"/> 
      <!-- Do not expect answer (fire and forget) --> 
      <camel:setExchangePattern pattern="InOnly"/> 
      <camel:to ref="defaultOutQueue"/> 
     </camel:route> 

     <!-- Route to receive --> 
     <camel:route id ="in" trace="true"> 
      <camel:from ref="defaultInQueue"/> 
      <camel:to uri="bean:defaultTextAdapter?method=onMessage"/> 
     </camel:route> 

    </camel:camelContext>