如何在运行时通过Exchange获取构建Route的RouteBuilder类?
如何通过Exchange获取Route对应的RouteBuilder类?
可以在运行时通过Exchange对象获取到构建Route的RouteBuilder类,借助Apache Camel的核心API就能实现,以下是修改后的代码示例:
class SimplePingRoute : RouteBuilder() { override fun configure() { from("timer://foo?fixedRate=true&period=1000") .routeId("pong-demo-app") .process { exc -> // 从Exchange中获取当前Route val currentRoute = exc.route // 获取Route的定义信息 val routeDefinition = currentRoute.routeDefinition // 获取构建该Route的RouteBuilder实例 val routeBuilder = routeDefinition.routeBuilder // 获取对应的Class对象 val routeBuilderClass = routeBuilder.javaClass // 这里可以根据需求使用Class对象,比如打印类名 println("当前Route对应的RouteBuilder类: ${routeBuilderClass.name}") } .to("log:pong") } }
关键说明:
exc.route能拿到当前Exchange所属的Route实例,通过它可以获取到RouteDefinition,而RouteDefinition中保存了创建该Route的RouteBuilder实例。- 如果你只需要类名而非实例,直接调用
routeBuilderClass.simpleName就能获取短类名,调用name获取全限定类名。 - 主流Camel版本(2.x、3.x、4.x)都支持
RouteDefinition.getRouteBuilder()方法,Spring Boot集成Camel的场景也完全适用。 - 若遇到RouteBuilder被代理包装的罕见情况,可以通过
routeBuilder.javaClass.superclass获取实际的RouteBuilder类。
内容的提问来源于stack exchange,提问作者Mannie
相关产品推荐
相关产品推荐

