我正在尝试使用属性文件从文件夹路由:
我的属性文件有一些属性: 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选项设置动态表达式。
我该怎么做?
答案 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>