我有一些Apache Camel路由有很多选项,比如这个:
<from uri="sftp://user@host:22/path?
password=vvvvv;delay=3000&streamDownload=true&
delete=true&idempotent=true&idempotentRepository=#jpaStore&
inProgressRepository=#jpaStore"/>
这不是那么糟糕,但我有六条其他路线具有相同的选项但路径不同。我想把所有选项都放在一个常数中,以避免重复:
<from uri="sftp://user@host:22/path?OPTIONS"/>
我或许可以使用Camel EL来完成此任务,但是没有一个示例显示它,并且我尝试猜测语法不起作用。
我像这样创建一个Spring bean:
<bean id="myoptions" class="java.lang.String">
<constructor-arg value="allmyoptions"/>
</bean>
并尝试像这样引用它:
<from uri="sftp://user@host:22/path?${myoptions}"/>
但是我收到了一个错误:
端点上无法设置1个参数。如果参数拼写正确并且它们是端点的属性,请检查uri。未知参数= [{$ {myoptions} =}]
这个问题Simple Expression in apache-camel uri正在尝试类似的东西,但他们使用Java DSL,我的路由是用XML配置的。
有没有人知道避免在路线上复制所有这些选项的好方法?
答案 0 :(得分:2)
从这个页面How do I use Spring Property Placeholder with Camel XML,我读到了#34;我们还没有支持任意Camel XML中的$ {something}符号。&#34;这就是说,他们在此页面上提出了各种解决方法,Properties。
对我来说有用的是按如下方式配置BridgePropertyPlaceholderConfigurer
:
<bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
<property name="location" value="classpath:myproperties.properties"/>
</bean>
在属性文件中我有:
OPTIONS=password=vvvvv;delay=3000&streamDownload=true&delete=true&idepotent=true&idempotentRepository=#jpaStore&inProgressRepository=#jpaStore
这允许我使用Spring属性占位符表示法${}
和带有{{ }}
的Camel占位符表示法:
<from uri="sftp://user@host:22/path?{{OPTIONS}}"/>
一个问题是,我需要删除属性文件中的编码&符号,将&
替换为&
。
另见: