春季启动骆驼测试

时间:2017-11-09 10:17:36

标签: apache-camel spring-boot-test

我正在使用Spring引导为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中启动了camel上下文。

如何强制不启动驼峰上下文。

3 个答案:

答案 0 :(得分:0)

在驼峰的最新版本中,有一个自动启动驼峰的选项。您可以通过添加autoStartup选项来实现您想要的功能。 例如,下面的路由配置为autoStartup = false,以防止在Spring启动时启动Camel。

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

您可以稍后通过调用其start方法手动启动Camel,如下所示:

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

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

答案 1 :(得分:0)

如果您使用旧版本的camel,那么autoStartup选项将无效,请尝试使用shouldStartContext。 有时在设置后启动camel,应该没有工作,所以我在下面的示例中进行了解决。试试这个:

在从代码中启动上下文之前手动设置shouldStartContext:

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

示例上下文:

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

答案 2 :(得分:0)

使用Camel 2.20.1解决了问题