在驼峰蓝图中bean的路由级别范围

时间:2018-04-17 08:22:02

标签: apache-camel spring-camel

我正在开发一个camel应用程序,我希望将bean的范围保持在路由级别。这意味着,如果我从两个不同的路由调用一个bean,则应该创建两个实例。但是在该路由中,应该为该bean使用相同的单个实例。以下是我的代码:

<bean id="testbean" class="testClass">  </bean>
<camelContext id="test"
        xmlns="http://camel.apache.org/schema/blueprint">
    <route id="1">
        <from uri="timer"/>
        <to uri="bean:test"/>
    </route>
    <route id="2">
       <from uri="timer"/>
       <to uri="bean:test"/>  
    </route>
</camelContext>

在路由2中,应该创建单独的bean实例。请建议是否有任何想法。

1 个答案:

答案 0 :(得分:3)

Apache Camel或类似产品中不支持路由范围的bean。您可以拥有共享单例bean或原型bean(每个调用的新实例)。这些是来自Spring XML或Blueprint XML的范围。

要使用原型范围,您需要同时:

  • 在Spring / Blueprint XML
  • 中将bean声明为原型
  • 在Camel的bean:xxx端点中设置<bean id="testbean" class="testClass"> </bean> <bean id="testbean2" class="testClass"> </bean> 选项

您还可以考虑使用两个bean,例如

testbean

然后在第一条路线中使用testbean2,在第二条路线中使用targetButton = $(".btn.btn-danger.btn-sm.motherboard") let elementToBeModified = targetButton.closest('tr').find('td:nth-child(2)'); elementToBeModified.empty(); elementToBeModified.html(` <td> <img src="" alt="" height="42" width="42"> <a href=""> Awesome title to replace! </a> </td> `);