如何将属性与 Spring XML 中 Apache Camel 路由中的(布尔)文字进行比较?

Posted

技术标签:

【中文标题】如何将属性与 Spring XML 中 Apache Camel 路由中的(布尔)文字进行比较?【英文标题】:How can I compare a Property to a (boolean) literal in an Apache Camel route in Spring XML? 【发布时间】:2015-12-10 23:28:40 【问题描述】:

我正在尝试获取基于条件语句执行操作的骆驼路线;如果该条件为真,那么它将执行该操作。但是,如果该条件为 false,则不会执行该操作。

条件语句基于从“.properties”文件中提取的属性值。我已经为 bean 中的属性定义了 placeholderPrefixplaceholderSuffix,它们分别是 。如果有帮助,该定义如下所示:

<bean id="com.example.springPropertyConfigurer"
    class="com.example.PropertiesSpringPlaceholderConfigurer">
    <constructor-arg index="0"
        type="com.example.PropertiesInterface"
        ref="com.example.Properties" />
    <property name="placeholderPrefix" value="" />
    <property name="placeholderSuffix" value="" />
    <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>

我目前的sn-p代码如下:

<camel:choice>
    <camel:when>
        <camel:simple>com.example.PropertyKey == 'true'</camel:simple>
            <camel:to uri="executingTargetAction" />
    </camel:when>
    <camel:otherwise>
        <!-- Empty block so that nothing happens -->
    </camel:otherwise>
</camel:choice>

到目前为止,这种方法并没有给我想要的结果。

我尝试同时使用&lt;xpath&gt;&lt;spel&gt; 而不是&lt;simple&gt; 来查看它们是否有效,但似乎这些表达式语言都希望条件的左侧包含Exchange 对象从骆驼路线。我不想将任何东西与 Exchange 对象进行比较——我只想将属性文件中的属性与我提供的给定文字(在本例中为布尔值“true”)进行比较。

我愿意使用除 &lt;simple&gt; 和上面列出的其他将执行此任务的其他 Camel 表达式语言。

【问题讨论】:

骆驼版本是2.8.1 【参考方案1】:

你可以在choice 和when 中使用bean 方法。该方法的返回类型将是布尔值,因此如果返回 true,那么您的代码何时将被执行,否则不会执行。

<choice>
<when>
<method ref="ABC" method="pqr" />
-----your desired logic-----
</when>
</choice>

【讨论】:

以上是关于如何将属性与 Spring XML 中 Apache Camel 路由中的(布尔)文字进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

Spring 3.2 - 如何将 XML 中配置的 FlatFileItemWriter 注入 java 类中的参数化属性

Springboot 日志管理配置logback-spring.xml

如何让是spring启动时加载一个类。这里类实现了读取xml配置数据到内存中(不是属性文件)

Spring和Spring Boot的属性

如何使用 Spring Boot 将 log4j.xml、应用程序属性和 jar 外部化?

Spring EL hello world实例