Properties
Since Camel 2.3
The Properties component is used for property placeholders in your Camel application, such as endpoint URIs. It is not a regular Camel component with producer and consumer for routing messages. However, for historical reasons it was named PropertiesComponent and this name is commonly known so we keep using it.
| See the Property Placeholder documentation for general information on using property placeholders in Camel. |
The Properties component requires to load the properties (key=value pairs) from an external source such as .properties files. The component is pluggable, and you can configure to use other sources or write a custom implementation (for example to load from a database).
Defining location of properties files
The properties component needs to know the location(s) where to resolve the properties. You can define one-to-many locations. You can separate multiple locations by comma, such as:
pc.setLocation("com/mycompany/myprop.properties,com/mycompany/other.properties"); You can mark a location to be optional, which means that Camel will ignore the location if not present:
pc.setLocations(
"com/mycompany/override.properties;optional=true"
"com/mycompany/defaults.properties"); Using system and environment variables in locations
The location now supports using placeholders for JVM system properties and OS environments variables.
For example:
location=file:{{sys:app.home}}/etc/foo.properties In the location above we defined a location using the file scheme using the JVM system property with key app.home.
To use an OS environment variable, instead you would have to prefix with env:. You can also prefix with env., however, this style is not recommended because all the other functions use colon.
location=file:{{env:APP_HOME}}/etc/foo.properties Where APP_HOME is an OS environment.
| Some OS’es (such as Linux) do not support dashes in environment variable names, so here we are using |
You can have multiple placeholders in the same location, such as:
location=file:{{env:APP_HOME}}/etc/{{prop.name}}.properties Defining location of properties files in Spring XML
Spring XML offers two variations to configure. You can define a spring bean as a PropertiesComponent which resembles the way done in Java. Or you can use the <propertyPlaceholder> tag.
<bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
<property name="location" value="classpath:com/mycompany/myprop.properties"/>
</bean> Using the <propertyPlaceholder> allows to configure this within the <camelContext> tag.
<camelContext>
<propertyPlaceholder id="properties" location="com/mycompany/myprop.properties"/>
</camelContext> For fine-grained configuration of the location, then this can be done as follows:
<camelContext>
<propertyPlaceholder id="myPropertyPlaceholder">
<propertiesLocation
resolver = "classpath"
path = "com/my/company/something/my-properties-1.properties"
optional = "false"/>
<propertiesLocation
resolver = "classpath"
path = "com/my/company/something/my-properties-2.properties"
optional = "false"/>
</camelContext> Options
The component supports the following options, which are listed below.
| Name | Description | Default | Type |
|---|---|---|---|
camel.component.properties.auto-discover-properties-sources | Whether to automatically discovery instances of PropertiesSource from registry and service factory. | true | Boolean |
camel.component.properties.default-fallback-enabled | If false, the component does not attempt to find a default for the key by looking after the colon separator. | true | Boolean |
camel.component.properties.encoding | Encoding to use when loading properties file from the file system or classpath. If no encoding has been set, then the properties files is loaded using ISO-8859-1 encoding (latin-1) as documented by java.util.Properties#load(java.io.InputStream) | String | |
camel.component.properties.environment-variable-mode | Sets the OS environment variables mode (0 = never, 1 = fallback, 2 = override). The default mode (override) is to use OS environment variables if present, and override any existing properties. OS environment variable mode is checked before JVM system property mode | 2 | Integer |
camel.component.properties.ignore-missing-location | Whether to silently ignore if a location cannot be located, such as a properties file not found. | false | Boolean |
camel.component.properties.initial-properties | Sets initial properties which will be used before any locations are resolved. The option is a java.util.Properties type. | String | |
camel.component.properties.location | A list of locations to load properties. You can use comma to separate multiple locations. This option will override any default locations and only use the locations from this option. | String | |
camel.component.properties.nested-placeholder | Whether to support nested property placeholders. A nested placeholder, means that a placeholder, has also a placeholder, that should be resolved (recursively). | true | Boolean |
camel.component.properties.override-properties | Sets a special list of override properties that take precedence and will use first, if a property exist. The option is a java.util.Properties type. | String | |
camel.component.properties.properties-parser | To use a custom PropertiesParser. The option is a org.apache.camel.component.properties.PropertiesParser type. | String | |
camel.component.properties.system-properties-mode | Sets the JVM system property mode (0 = never, 1 = fallback, 2 = override). The default mode (override) is to use system properties if present, and override any existing properties. OS environment variable mode is checked before JVM system property mode | 2 | Integer |