从属性文件中读取Camel常量

时间:2014-10-20 06:55:29

标签: apache-camel

我正试图从属性文件中读取时间延迟。

已在我的属性文件中定义:

time_inMilis=15000

我已将我的驼峰上下文xml配置为:

    <bean id="property" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>file:/D:/Develop/resources/my.properties
            </value>
        </property>
    </bean>


    <camel:camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">   

     <propertyPlaceholder id="properties" location="file:/D:/Develop/resources/my.properties"/>

        <camel:route id="delayQueue">
            <camel:from uri="seda:queue1" />
            <delay asyncDelayed="true">
                <constant>${time_inMilis}</constant>
            </delay>
            <camel:to uri="seda:queue2" />
        </camel:route>

    </camel:camelContext>

camel不会抛出任何错误,但它似乎忽略$ {time_inMilis}并为我的延迟时间设置为0。

从属性文件中读取延迟常量的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

首先,仅使用 camel:propertyPlaceholder 而不是声明bean 属性就足够了。

第二个错误是您在尝试阅读 time_inMilis 属性值时使用的是Constant而不是Simple表达式。

第三,在试图获取你的财产价值时,你应该特别告诉Camel你正在寻找属性。

如果你的上下文定义了如下的propertiesPlaceholder:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <propertyPlaceholder id="props" location="classpath:/org/smp/eip/sample.properties"/>
    <package>org.apache.camel.example.spring</package>
</camelContext>

他们使用java DSL,您将能够像这样阅读 textProeprty

from("file:src/data?noop=true")
    .transform().simple("Text read from properties: ${properties:textProperty}")
    .bean(new SomeBean());

使用原始帖子中的Spring DSL,正确的阅读方式是:

  <camel:route id="delayQueue">
        <camel:from uri="seda:queue1" />
        <delay asyncDelayed="true">
            <simple>${properties:time_inMilis}</simple>
        </delay>
        <camel:to uri="seda:queue2" />
    </camel:route>