Properties

Overview

Property endpoints allow you to resolve the address for an endpoint using a property placeholder. Property placeholders can be created using a properties file, OSGi properties, the OSGi registry, Spring beans, or as part of the route definition.

The property placeholder is typically used when:

  • looking up or creating endpoints

  • looking up beans in the Registry

  • using Blueprint's PropertyPlaceholder with Apache Camel's Properties component

  • using property placeholder in many of Spring's Camel xml tags, such as package, packageScan, contextScan, jmxAgent, endpoint, routeBuilder, proxy, and others

URI format

The URI format for a property endpoint is:

properties:key[?options]

Where key is the key for the property to lookup.

Options

Table 65, “Properties options” describes the options for a property endpoint.

Table 65. Properties options

NameDefaultDescription
cache true Specifies whether to cache loaded properties.
locations  Specifies a list of locations from which to load properties. A comma separated list is use to specify multiple locations. This option will override any locations specified in the camelContext or the configuration.
ignoreMissingLocation false Apache Camel 2.10: Specifies whether to silently ignore a resource that cannot be located, such as a properties file that cannot be found.
propertyPrefix null Apache Camel 2.9: Optional prefix prepended to property names before resolution.
propertySuffix null Apache Camel 2.9: Optional suffix appended to property names before resolution.
fallBackToUnaugmentedProperty true Apache Camel 2.9: When true, first attempt to resolve property name augmented with propertyPrefix or propertySuffix before falling back to the specified unaugmented name. Otherwise, search only for the augmented property name.
prefixToken {{ Apache Camel 2.9: Specifies the token that indicates the beginning of a property token.
suffixToken }} Apache Camel 2.9: Specifies the token that indicates the end of a property token.

[Note]Note

You can resolve a property from any Java code by using the resolvePropertyPlaceholders method on the CamelContext.

Bridging Spring and Apache Camel property placeholders

Available as of Apache Camel 2.10.

The Spring Framework does not allow third-party frameworks, such as Apache Camel, to seamlessly hook into the Spring property placeholder mechanism. However, you can easily bridge Spring and Camel by declaring a Spring bean with the type org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer, which is a Spring org.springframework.beans.factory.config.PropertyPlaceholderConfigurer type.

To bridge Spring and Camel you must define a single bean as shown here:

<!-- bridge spring property placeholder with Camel -->
<!-- you must NOT use the <context:property-placeholder at the same time, only this bridge bean -->
<bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
  <property name="location" value="classpath:org/apache/camel/component/properties/cheese.properties"/>
</bean>
[Important]Important

You must not use the spring context:property-placeholder namespace at the same time.

After declaring this bean, you can define property placeholders using either the Spring style or the Camel style within the <camelContext> tag as shown here:

<!-- a bean that uses Spring property placeholder -->
<!-- the ${hi} is a spring property placeholder -->
<bean id="hello" class="org.apache.camel.component.properties.HelloBean">
  <property name="greeting" value="${hi}"/>
</bean>

<camelContext xmlns="http://camel.apache.org/schema/spring">
  <!-- in this route we use Camels property placeholder {{ }} style -->
  <route>
    <from uri="direct:{{cool.bar}}"/>
    <bean ref="hello"/>
    <to uri="{{cool.end}}"/>
  </route>
</camelContext>

Notice how the hello bean uses pure Spring property placeholders via the ${ } notation. And in the Camel routes, we use the Camel placeholder notation with {{ }}.