Для всех наших сред данные конфигурации хранятся на целевых машинах в форме файлов свойств. Мы используем PropertyPlaceholderconfigurer из SpringFramework, чтобы связать эти свойства с нашими приложениями, чтобы обеспечить переносимость между средами.
Например, если я знаю, что /etc/myapp/database.properties будет присутствовать на любой машине, на которой будет работать мое приложение, то в моей весенней конфигурации мне просто нужно что-то вроде этого:
<bean id="myPropertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/etc/myapp/database.properties</value>
</list>
</property>
</bean>
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://${db.host}:3306/${db.name}" />
<property name="username" value="${db.user}" />
<property name="password" value="${db.pass}" />
</bean>
Для этого класса Spring есть несколько вариантов, где могут храниться файлы свойств. Вы даже можете сделать их заменами и передать их как переменные окружения:
<bean id="myPropertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="searchSystemEnvironment" value="true" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="locations">
<list>
<value>${database.configuration.file.url}</value>
</list>
</property>
</bean>
И в bash_profile (или как угодно):
export JAVA_OPTS = "-Ddatabase.configuration.file.url = file: ///etc/myapp/database.properties"
Или просто та же опция -D, переданная при вызове «java», в зависимости от того, что вы делаете.
FWIW, мы храним наши файлы свойств отдельно как RPM.