【问题标题】:Route level scope for bean in camel blueprint骆驼蓝图中bean的路由级别范围
【发布时间】:2018-04-18 13:47:45
【问题描述】:

我正在开发一个骆驼应用程序,我想在其中将 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 实例。如果有任何想法,请提出建议。

【问题讨论】:

  • 为什么要这么做,是什么原因造成的?
  • @ClausIbsen - 因为如果路由 1 正在对一个测试类实例进行一些处理,我不希望路由 2 使用该类的相同实例。它应该有自己的 bean 实例.有什么办法可以让我只有在路线1完成任务后才能触发路线2。谢谢
  • @nik,您并没有真正回答这个问题。是什么要求让您认为每个路由都需要两个实例作为实现该要求的解决方案?
  • @Ralf - 感谢您的询问。我需要每条路线有一个实例,而不是每条路线有两个实例。
  • @Ralf - 我刚刚阅读了 bean 范围,用原型定义 bean 可以为我提供这样的功能吗?

标签: apache-camel spring-camel


【解决方案1】:

在 Apache Camel 等中不支持路由范围 bean。您可以共享单例 bean 或原型 bean(每次调用新实例)。这些是来自 Spring XML 或 Blueprint XML 的范围。

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

  • 在 Spring/Blueprint XML 中将 bean 声明为原型
  • 在 Camel 的 bean:xxx 端点中设置 cache=false 选项

你也可以考虑有两个豆子,例如

<bean id="testbean" class="testClass">  </bean>
<bean id="testbean2" class="testClass">  </bean>

然后在第一条路由中使用testbean,在第二条路由中使用testbean2

【讨论】:

猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多