How do I use Spring Property Placeholder with Camel XML
We don't do NOT yet support the ${something
} notation inside arbitrary Camel XML. For example at the time of writing this is not NOT supported (due Spring limitations)
Code Block | ||
---|---|---|
| ||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd "> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/> <camelContext xmlns="http://activemq.apache.org/camel/schema/spring"> <route> <from refuri="activemq:${someQueueName}"/> <to uri="mock:results"/> </route> </camelContext> </beans> |
However you can use the <endpoint/> element to define endpoints which does support the property resolving which you can then refer to by name or reference in XML or Java code., using the Ref component as shown below (notice the ref: in the uri):
Code Block | ||
---|---|---|
| ||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd "> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/> <camelContext xmlns="http://activemq.apache.org/camel/schema/spring"> <endpoint id="input1" uri="activemq:${someQueueName}"/> <route> <from refuri="ref:input1"/> <to uri="activemq:OutputQueue"/> </route> </camelContext> </beans> |
Camel does not yet fully support property placeholders as Spring 3.0 is required due to there is a limitation in Spring 2.x. See JIRA SPR-4466
Tip | ||
---|---|---|
| ||
From Camel 2.10 onwards you can bridge Spring and Camel property placeholders, see Using PropertyPlaceholder for more details. |
Here is a trick that you can use to define the uri in a property file using Spring injection and Camel endpoint : http://cmoulliard.blogspot.com/2009/05/trick-to-pass-uri-declared-in-property.html.
From Camel 2.3 onwards there is a Properties component build in Camel core which allows you to use properties in the same way as Spring property placeholders, and even more.