如何使骆驼简单表达式与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。由于其他项目的一些限制,我无法升级到较新的骆驼。 我认为它有一个错误,所以 在使用 时不起作用 【参考方案1】:

您可以使用简单的属性函数(http://camel.apache.org/simple)

<simple>$in.header.queuename == $properties:MQ.queuename1</simple>

嵌套 中的 可能是由于一个错误,该错误已在较新的 Camel 版本中得到修复。

【讨论】:

非常感谢克劳斯。有用。我买了你的书《骆驼行动》。这对骆驼来说是一本很棒的书。你有计划出版这本书的新版本吗? 是的,如果 Camel 越来越受欢迎,并且当前书籍的销量仍然不错,那么是的,出版商很可能会同意第二版。【参考方案2】:

从您提供的路由配置来看,您似乎错过了在标题中设置队列名称。相反,您应该使用属性组件作为

&lt;simple&gt;$properties:queuename == 'MQ.queuename1'&lt;/simple&gt;

【讨论】:

我已经在标题中设置了值(抱歉没有在我上面的问题中设置该设置)。如果我硬编码值 $in.header.queuename == 'NI',骆驼路线就可以工作。只有当我尝试使用属性占位符时它才不起作用。 我已经尝试过您的解决方案:$in.header.queuename == 'MQ.queuename1'。但这不起作用。

以上是关于如何使骆驼简单表达式与spring xml中的属性占位符一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在骆驼XML路径中删除一部分文件名

Spring EL hello world实例

骆驼不是春天开始的

spring-boot骆驼案例嵌套属性作为环境变量

如何使用 Spring DSL 在骆驼中记录标头值

骆驼使用xpath检索xml标签名称