如何使骆驼简单表达式与spring xml中的属性占位符一起使用
Posted
技术标签:
【中文标题】如何使骆驼简单表达式与spring xml中的属性占位符一起使用【英文标题】:how to make camel simple expression work with property placeholder in spring xml 【发布时间】:2014-03-26 22:59:11 【问题描述】:我正在尝试在骆驼路线中使用属性占位符。 我有定义属性的 test.properties:MQ.queuename1=TESTQUEUE。 在骆驼上下文中,我定义占位符:
<camel:camelContext xmlns="http://camel.apache.org/schema/spring" >
<propertyPlaceholder id="camel-properties" location="file:$web.external.propdir/test.properties"/>
在路由中,我使用简单的表达式来评估属性:
<choice>
<when>
<simple>$in.header.queuename == 'MQ.queuename1'</simple>
<bean ref="ExtractOrderContent" method="extractContent"/>
<to uri="websphere-mq:queue:TESTQUEUE" pattern="InOnly"/>
</when>
</choice>
当我运行骆驼时,属性文件被骆驼识别,但看起来简单的表达式不起作用。我有什么想念的吗?
【问题讨论】:
你用的是什么版本的骆驼? 骆驼版本是2.8.4。由于其他项目的一些限制,我无法升级到较新的骆驼。 我认为它有一个错误,所以 在使用您可以使用简单的属性函数(http://camel.apache.org/simple)
<simple>$in.header.queuename == $properties:MQ.queuename1</simple>
嵌套
【讨论】:
非常感谢克劳斯。有用。我买了你的书《骆驼行动》。这对骆驼来说是一本很棒的书。你有计划出版这本书的新版本吗? 是的,如果 Camel 越来越受欢迎,并且当前书籍的销量仍然不错,那么是的,出版商很可能会同意第二版。【参考方案2】:从您提供的路由配置来看,您似乎错过了在标题中设置队列名称。相反,您应该使用属性组件作为
<simple>$properties:queuename == 'MQ.queuename1'</simple>
【讨论】:
我已经在标题中设置了值(抱歉没有在我上面的问题中设置该设置)。如果我硬编码值 $in.header.queuename == 'NI',骆驼路线就可以工作。只有当我尝试使用属性占位符时它才不起作用。 我已经尝试过您的解决方案:以上是关于如何使骆驼简单表达式与spring xml中的属性占位符一起使用的主要内容,如果未能解决你的问题,请参考以下文章