我有一个JDBC端点端的路由:骆驼isMockEndpointsAndSkip不会跳过JDBC端点
from(CONNECTOR).routeId(ROUTE_ID).process(createSelectStatement).to(jdbc);
JDBC的端点创建是这样的:
public static final String DB_NAME = "db";
private void setupJdbcEndpoint() {
JdbcEndpoint endpoint = getContext().getEndpoint("jdbc:" + DB_NAME, JdbcEndpoint.class);
endpoint.setOutputClass(OUTClass.class.getName());
endpoint.setOutputType(JdbcOutputType.SelectList);
jdbc = endpoint;
}
在我的单元测试,我想“模拟和跳过”的数据库:
@Override
public String isMockEndpointsAndSkip() {
return "jdbc:*";
}
我也试过其他图案:“JDBC:分贝”,“JDBC://分贝”(该字符串是在l所示并且是toString的输出)
但是无论使用哪种模式,数据库都被调用。日志显示
org.apache.camel.component.jdbc.JdbcProducer: Executing JDBC Statement: SELECT..
然后将正确的(空的)结果发送到最后的模拟端点。而嘲弄的终端mock:jdbc:db
或mock:jdbc://db
()永远不会收到任何东西。
那么如何跳过这个jdbc端点呢?
以及如何获得模拟端点的引用,这些端点是使用通配符创建的,如'*'?
编辑
在此设置下我也看到日志:
InterceptSendToMockEndpointStrategy: Adviced endpoint [jdbc://db] with mock endpoint [mock:jdbc:db]
所以isMockEndpointAndSkip
似乎工作?但在我的情况下,jdbc端点不会被跳过。
第二编辑 - 从Vimsha 试图回答不使用isMockEndpointAndSkip
但提供AdviceWithRouteBuilder没有帮助(我觉得骆驼实现isMockEndpointAndSkip
方法相同)。我看到在日志(使用构建器Vimsha建议):
InterceptSendToEndpoint[jdbc:* -> [To[mock://jdbc://db]]], process[[email protected]], To[jdbc://db]]]
除此之外数据库仍然是所谓的模拟端点没有看到任何的交流。
这里是详细的建设者:
new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
replaceFromWith(in);
interceptSendToEndpoint("jdbc:*").skipSendToOriginalEndpoint().to(dbMock);
}
};
这也为我解决。请确保weaveById(“...”)中的id参数与您的端点ID相符。 –