使用属性的Camel文件uri

时间:2014-10-19 07:26:38

标签: properties apache-camel

我正在尝试使用属性文件从文件夹路由:

我的属性文件有一些属性: from.file = D:/ Develop / resources

我希望在camel context xml中使用它作为文件路由,

我试过了:

<camel:route id="Main-Route">
        <camel:from uri="file:${from.file}" />
        <camel:to uri="seda:fooQueue" />
</camel:route>

但是骆驼引发了我的异常: 不允许使用带有$ {}占位符的动态表达式。使用fileName选项设置动态表达式。

我该怎么做?

3 个答案:

答案 0 :(得分:5)

在Camel中,您使用{{property}}在路由中注入属性。 请在此处阅读更多http://camel.apache.org/properties.html

您的示例将更改为:

<camel:route id="Main-Route">
        <camel:from uri="file:{{from.file}}" />
        <camel:to uri="seda:fooQueue" />
</camel:route>

您还需要告诉Camel它可以在哪里找到您的属性文件。从上面的链接: Spring XML提供了两种配置变体。您可以将spring bean定义为PropertiesComponent,类似于Java DSL中的方式。或者你可以使用标签。

<bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
    <property name="location" value="classpath:com/mycompany/myprop.properties"/>
</bean>

使用标签使配置更加新鲜,例如:

<camelContext ...>
   <propertyPlaceholder id="properties" location="com/mycompany/myprop.properties"/>
</camelContext>

答案 1 :(得分:1)

在apache camel的文件组件中,起始目录不应包含动态表达式。如果您还想提供动态起始目录,可以将属性文件中的整个路径设置为文件组件的CamelFileName头,其中fileComponent定义为<to uri="file://">

答案 2 :(得分:0)

这个问题是读取占位符为:

某些bean的

$ {some-property}例如:

<bean id="bean" class="">
  <property name="field Constructor" value="${some.property}" />
</bean>

我收到错误。

通过定义PropertyPlaceholderConfigurer来解决它:

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

 <bean id="beanId" class="com.viewlinks.eim.properties.MyBean">
    <property name="fieldConstructor" value="${some.property}" />
</bean>


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

 <propertyPlaceholder id="properties"  location="file:/D:/Proj/resources/myprop.properties"/>

<camel:route id="Main-Route">
  <camel:from uri="file:{{from.file}}" />
  <camel:to uri="file:{{to.file}}" />
</camel:route>

</camel:camelContext>