Spring configuration is found in the src/main/resources/conf
directory of the application
module.
application
src/main/resources
cougar-application.properties <-- Optional properties file to set cougar property values
for your application at a level below overrides
Will override service-defaults.properties but can still
be overridden by overrides.properties
Must have this exact name
conf
<spring config files>
service-defaults.properties <-- default properties (incl. overrides of other modules)
You can rename this file to anything you like, just
update the property placeholder in the spring config.
launcher
src/main/resources
conf
overrides.properties <-- overrides to Cougar, application and other modules
Notes:
MUST_BE_OVERRIDDEN
) for all your configuration items, appropriately commentedsrc/main/resources
is mentioned you can also put the same files in src/test/resources
, which will
take precedence over the ones in src/main/resources
during the test
phase of the module.Each and every Cougar module is assembled using its src/main/resources/conf/cougar-application-spring.xml
file.
Within this file a PropertyConfigurer
is defined that segregates and scopes your configuration data with the use of
a “property placeholder prefix”, to avoid collisions with other modules’ data. The following definition is typical, and
is what the Cougar archetype gives you by default.
<bean class="com.betfair.cougar.util.configuration.PropertyConfigurer">
<property name="defaultConfig" value="conf/<artifactId>-defaults.properties"/>
<property name="configOverride" value="overrides.properties"/>
<property name="placeholderPrefix" value="$MY_APPLICATION{"/>
</bean>
Say you’ve defined the property magic.number
in <artifactId>-defaults.properties
and you want to use it in
the assembly - you reference it like so:
<property name="magicNumber" value="$MY_APPLICATION{magic.number}"/>
If you want to reference another module’s configuration data in your assembly, you need to know its property placeholder
prefix. If you depend on the module in your project, you can navigate to the depended-upon JAR and look inside it at
src/main/resources/conf/cougar-application-spring.xml
and look for the prefix there.
It’s strongly recommended that you change the property placeholder prefix from MY_APPLICATION to something more specific to your module, to avoid collisions.
Often you will find that there are a number of core Cougar settings which you always want set to a specific value,
regardless of environment. For this you can use a cougar-application.properties
file, which is loaded prior to the
overrides file.
Cougar supports encrypted property values via implementations of the StringEncryptor
interface found in
Jasypt. To register an implementation of this interface you must create a bootstrap
module, with the following bean definition:
<bean parent="cougar.core.EncryptorRegisterer" lazy-init="false">
<constructor-arg>
<bean class="com.betfair.MyStringEncyptor"/>
</constructor-arg>
</bean>
Note: Cougar only supports a single encryptor, so any attempt to set 2 will fail.
Those Cougar framework modules that have properties of interest and that can be over-ridden are documented separately.