我拥有一个spring应用程序,并希望在应用程序启动期间动态添加骆驼路线。端点在属性文件中配置并在运行时加载。 使用Java DSL,我正在使用for循环创建所有路由,
for(int i=0;i<allEndPoints;i++)
{
DynamcRouteBuilder route = new
DynamcRouteBuilder(context,fromUri,toUri)
camelContext.addRoutes(route)
}
private class DynamcRouteBuilder extends RouteBuilder {
private final String from;
private final String to;
private MyDynamcRouteBuilder(CamelContext context, String from, String to) {
super(context);
this.from = from;
this.to = to;
}
@Override
public void configure() throws Exception {
from(from).to(to);
}
}
但在创建第一条路线时会遇到异常
无法创建路由file_routedirect:位置:>>> OnException [[class org.apache.camel.component.file.GenericFileOperationFailedException]-> [Log [Exception trapped $ {exception.class}]],进程[Processor @ 0x0 ]]] <<<在路由中:Route(file_routedirect:)[[From [direct:...因为存在引用,必须在以下位置指定:process [Processor @ 0x0] \ n \ ta
不知道这是什么问题?有人对此有任何建议或解决办法吗?谢谢
答案 0 :(得分:0)
好吧,要在迭代中创建路线,最好有一些对象保存一条路线的不同值。我们称之为RouteConfiguration
,这是一个简单的POJO,其中包含from
,to
和routeId
的String字段。
我们正在使用 YAML文件进行配置,因为您使用的是真实列表格式,而不是在属性文件中使用“平面列表”(route[0].from
, route[0].to
)。
如果使用 Spring ,则可以使用@ConfigurationProperties
当您能够创建这样的值对象集合时,可以简单地对其进行迭代。这是一个非常简化的示例。
@Override
public void configure() {
createConfiguredRoutes();
}
void createConfiguredRoutes() {
configuration.getRoutes().forEach(this::addRouteToContext);
}
// Implement route that is added in an iteration
private void addRouteToContext(final RouteConfiguration routeConfiguration) throws Exception {
this.camelContext.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from(routeConfiguration.getFrom())
.routeId(routeConfiguration.getRouteId())
...
.to(routeConfiguration.getTo());
}
});
}