2017-11-09 11 views
0

Ich schreibe einen Test für Camel mit Spring Boot. Im Folgenden finden Sie Konfiguration auf der TestklasseSpring Boot Camel Test

@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()) 
    } 

ich Kamel erwarten sollte nicht gestartet werden. Aber wenn ich den Test starte, ist es bereits gestartet.

Ich habe festgestellt, dass CamelSpringBootRunner Camel Kontext in CamelSpringBootExecutionListener startet.

Wie zwinge ich, den Kamelkontext nicht zu starten.

+0

Welche Version von Camel benutzt du? –

+0

Ich verwende neueste Camel 2.20.0. Aber es wurde bereits ein Fehler gemeldet. [CAMEL-11955] (https://issues.apache.org/jira/browse/CAMEL-11955) – AMK

+0

Die Verwendung von Camel 2.20.1 löste das Problem – AMK

Antwort

0

Mit Camel 2.20.1 löste das Problem

0

In der neuesten Version von camel gibt es eine Option für AutoStartup von Kamel. Sie erreichen, was Sie wollen, indem Sie die Option autoStartup hinzufügen. Zum Beispiel ist die folgende Route konfiguriert autoStartup = false, um zu verhindern, dass Camel startet, wenn Spring startet.

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

Sie können manuell Camel beginnen später durch seine Startmethode aufgerufen wird, wie unten dargestellt:

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

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

Ich habe autoStartup auf false gesetzt, aber CamelSpringBootExecutionListener berücksichtigt dieses Autostartup-Flag nicht . und startet den Kontext. – AMK

+0

welche Version von Camel verwendest du ??? – NitKrish

+0

Fehler [CAMEL-11955] (https://issues.apache.org/jira/browse/CAMEL-11955) in Camel-2.20.0 angesprochen – AMK

0

Wenn Sie ältere Version von Kamel verwenden, dann wird autoStartup Option versuchen nicht funktionieren mit shouldStartContext statt. Manchmal startet camel nach dem Setzen von sustartStartContext nicht, also habe ich die Arbeit im untenstehenden Beispiel beschrieben. Versuchen Sie folgendes:

Einstellung shouldStartContext manuell, bevor Sie den Kontext aus dem Startcode:

((SpringCamelContext)camelContext).setShouldStartContext(true); 
camelContext.start(); 

Beispiel Kontext:

<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>