The key is to use Spring PropertyPlaceholderConfigurer. Example time...
1. context.xml file
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>${target_env}.configuration.properties</value>
<value>file:${target_env}</value>
</list>
</property>
</bean>
<bean id="myAccessDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.drivername}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
2. ${target_env}.configuration.properties like: test.configuration.properties ( you have to give an value for target_env)
jdbc.drivername=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://10.10.10.10:1433;databaseName=mydatabase
jdbc.username=myusername
jdbc.password=mypassword
3.1 Use external properties file, it'll match second location
E:\Liferay Developer Studio\workspace\myproject\target>java -Dtarget_env=E:\Tina\test.configuration.properties -jar project.jar
3.2 Use internal properties file which is packed inside project.jar, assume has test.configuration.properties
E:\Liferay Developer Studio\workspace\myproject\target>java -Dtarget_env=test -jar project.jar
I tried to set a default value by using System Properties, but it doesn't work on my case, anyone knows how to do that, please show me an example!
If have problems on building jars, see my another blog: http://blog.csdn.net/smile_juan/article/details/8293229
--------------------------------------------------------------------------------------------------------------------------------------
In case, we only want one properties file, but we config like this way:
local.jdbc.drivername=com.microsoft.sqlserver.jdbc.SQLServerDriver
local.jdbc.url=****
local.jdbc.username=****
local.jdbc.password=****
dev.jdbc.drivername=com.microsoft.sqlserver.jdbc.SQLServerDriver
dev.jdbc.url=
dev.jdbc.username=
dev.jdbc.password=
prod.jdbc.drivername=com.microsoft.sqlserver.jdbc.SQLServerDriver
prod.jdbc.url=
prod.jdbc.username=
prod.jdbc.password=
Through the command line, we want to pass like -Dtarget_env=local, then it will use all settings start with local. Spring is very powerful, it provides the way to handle the case. What we only need to do is config in configuration.xml like this:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:datasource.properties" />
</bean>
<bean id="myAccessDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${${target_env}.jdbc.drivername}" />
<property name="url" value="${${target_env}.jdbc.url}" />
<property name="username" value="${${target_env}.jdbc.username}" />
<property name="password" value="${${target_env}.jdbc.password}" />
</bean>
We run the jar as before.