我有一个Springboot应用程序,其中配置了一些Camel路由。
public class CamelConfig {
private static final Logger LOG = LoggerFactory.getLogger(CamelConfig.class);
@Value("${activemq.broker.url:tcp://localhost:61616}")
String brokerUrl;
@Value("${activemq.broker.maxconnections:1}")
int maxConnections;
@Bean
ConnectionFactory jmsConnectionFactory() {
PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(new ActiveMQConnectionFactory(brokerUrl));
pooledConnectionFactory.setMaxConnections(maxConnections);
return pooledConnectionFactory;
}
@Bean
public RoutesBuilder route() {
LOG.info("Initializing camel routes......................");
return new SpringRouteBuilder() {
@Override
public void configure() throws Exception {
from("activemq:testQueue")
.to("bean:queueEventHandler?method=handleQueueEvent");
}
};
}
}
我想测试从activemq:testQueue
到queueEventHandler::handleQueueEvent
的路由。我尝试了这里提到的http://camel.apache.org/camel-test.html的不同方法,但似乎没有成功。
我正在努力做这样的事情:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {CamelConfig.class, CamelTestContextBootstrapper.class})
public class CamelRouteConfigTest {
@Produce(uri = "activemq:testQueue")
protected ProducerTemplate template;
@Test
public void testSendMatchingMessage() throws Exception {
template.sendBodyAndHeader("testJson", "foo", "bar");
// Verify handleQueueEvent(...) method is called on bean queueEventHandler by mocking
}
但是我的ProducerTemplate始终是null
。我尝试自动连接CamelContext
,我得到一个异常,说 * 它不能解析camelContext*。但是可以通过将SpringCamelContext.class
添加到@SpringBootTest
类来解决这个问题。但是我的ProducerTemplate
仍然是null
。
请建议。我用的是 Camel 2. 18和春 Boot 1. 4。
4条答案
按热度按时间k2arahey1#
在支持Spring Boot 2的Camel 2.22.0及后续版本中,您可以使用以下模板来测试支持Spring Boot 2的路由:
Sping Boot 区分了
@Configuration
和@TestConfiguration
。初级配置将替换任何现有配置(如果在顶级类上进行了注解),而@TestConfiguration
将在其他配置之外运行。此外,应当理解,在较大的项目中,您可能会遇到自动配置问题,因为您不能依赖Sping Boot 2来正确配置您的自定义数据库池,或者在您具有特定的目录结构并且配置不在直接祖先目录中的情况下。在这种情况下,省略
@EnableAutoConfiguration
注解可能是更好的选择。为了告诉Spring仍然自动-配置Camel,您只需将CamelAutoConfiguration.class
传递给@SpringBootTest
中提到的类由于没有执行自动配置,Spring不会在您的测试类中加载测试配置,也不会初始化Camel。通过手动将这些配置添加到 Boot 类中,Spring将为您完成这一操作。
jk9hmnmh2#
对于使用MQ和Sping Boot 的一个路由,如下所示:
我使用adviceWith来替换端点,并且只使用模拟:
我使用以下依赖项:Sping Boot 2.1.4-RELEASE和Camel 2.23.2。完整的源代码可以在Github上找到。
eeq64g8w3#
这是我最后的做法:
anhgbhbe4#
您是否尝试使用Camel测试运行程序?
如果使用
camel-spring-boot
依赖关系,您可能知道它使用自动配置来设置Camel:这意味着您可能还需要在测试中添加
@EnableAutoConfiguration
。