在属性文件中定义了变量测试:
test=OLD_VALUE
在下面的Spring-DSL定义中,定义了一个骆驼路由。通过PropertiesComponent加载属性。
<bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
<property name="cache" value="false"/>
<property name="location" value="classpath:res.properties"/>
</bean>
<camelContext id="ctx" xmlns="http://camel.apache.org/schema/spring">
<route id="toParamRoute">
<from uri="servlet:myParam"/>
HERE I WOULD LIKE TO SET THE
VARIABLE TEST WITH A NEW VALUE,
SUCH THAT THE FOLLOWING LOG MESSAGE
WILL PRINT THE NEW VALUE,
E.G: test=NEW_VALUE
<log message="{{test}}"/>
</route>
</camelContext>
我尝试使用groovy,语言脚本表达,外部spring bean的不同方法,但是没有成功。有没有一种方法可以设置和更改启动时加载的变量的值? 最好的方法是什么?
有人可以帮助我吗?我没有在stackoverflow上找到任何类似的问题!我面临的问题和寻找的解决方案是构建WEB UI管理控制台以动态更改路由某些行为的基本构件。为了简化流程,我可以说在propertyPlaceholder加载属性文件后,然后可以通过UI网页更改路由的默认参数,并且只能在启动路由之后。
答案 0 :(得分:0)
使用语法{{property}}
评估的属性在上下文初始化期间仅解析一次。如果需要反映运行时更改,请使用Simple language
示例:
<bean id="myProperties" class="java.util.Properties"/>
<bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
<property name="cache" value="false"/>
<property name="location" value="classpath:res.properties"/>
<property name="overrideProperties" ref="myProperties" />
</bean>
<camelContext id="ctx" xmlns="http://camel.apache.org/schema/spring">
<route id="toParamRoute">
<from uri="timer://foo"/>
<log message="About to change property test from value ${properties:test} to value ${exchangeProperty.CamelTimerCounter}. Initial value was {{test}}"/>
<bean ref="myProperties" method="setProperty(test, ${exchangeProperty.CamelTimerCounter})" />
<log message="New value is ${properties:test}"/>
</route>
</camelContext>