Here I describe the way I use to configure my applications. The main idea is to define a property file outside of the application, doing this, it is possible to deploy the same application in several environments (dev/test/prod) without any changes.
First of all, the property file:
net.classnotfound.app.jdbc.server=db-server net.classnotfound.app.jdbc.port=1521 net.classnotfound.app.jdbc.sid=xe net.classnotfound.app.jdbc.user=scott net.classnotfound.app.jdbc.password=koala
The tips is to define a parameter in the Tomcat context file which points to the file location:
<Parameter name="directoryConfig" override="false" value="FILE_PATH"/>
And now, to get the value in the application, I use Spring this way:
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="file:#{contextParameters.directoryConfig}/app-config.properties" /> </bean>
This is an example of its usage to set up an Oracle datasource:
<orcl:pooling-datasource id="dataSource" url="jdbc:oracle:thin:@${net.classnotfound.app.jdbc.server}:${net.classnotfound.app.jdbc.port}:${net.classnotfound.app.jdbc.sid}" username="${net.classnotfound.app.jdbc.user}" password="${net.classnotfound.app.jdbc.password}"> </orcl:pooling-datasource>
Now, we can just change the path of the configuration file, depending on each environment, to automatically have the related parameters.