Camel提供了兩種定義路由的形式, html
一種是JAVADSL咱們定義一個RoutBuilder 在config裏面定義form("bean:a").to("bean:b") java
還有一種是SPringDSL 經過XML的形式來配置. app
若是咱們須要在應用啓動後來動態的增長或者修改路由該怎麼辦呢. ui
能夠經過與beanShell的配合達到上述目的, spa
首先定義好一個RouteDefinition對象rd,放入beanShell的執行器Interpreter中, orm
寫好路由定義腳本採用javaDSL : rd.from("bean:a).to("bean:ss") htm
執行腳本,而後camel容器再加載rd便可. 對象
代碼以下: blog
1
2
3
4
5
6
7
8
|
String script ="rd.from(\"bean:a\").to(\"bean:b\")";
Interpreter scriptInterpreter =newInterpreter();
scriptInterpreter.set("rd", rd);
scriptInterpreter.eval(script);
scriptInterpreter.eval(script);
rd.setId("RD1001");//給路由設置ID
rd.markPrepared();
camelContext.startRoute(rd);
|
固然在腳本定義路由時不能直接用camel提供的一些表達式,如bean(),simple()等.須要寫成rd.from("bean:b").rd.bean("c") ip
若是以爲這樣不簡潔的話,還能夠採用自定義Component的形式來解決這個問題.