我正在使用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上下文。
如何强制不启动驼峰上下文。
答案 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解决了问题