Этот тип конфигурации следует хранить снаружи в коде, обычно в файле свойств, вводя требуемое значение во время выполнения.
Обычно я использую ряд файлов свойств с org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
в Spring, каждый из которых позволяет при необходимости переопределять значения свойств для конкретного пользователя, что приводит к следующей конфигурации:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="ignoreResourceNotFound" value="true"/>
<property name="order" value="1"/>
<property name="locations">
<list>
<value>classpath:my-system.properties</value>
<value>classpath:my-system-${HOST}.properties</value>
<value>classpath:my-system-${USERNAME}.properties</value>
</list>
</property>
</bean>
Если вы не используете Spring, вы можете добиться такого же эффекта в коде, как этот:
Properties properties = new Properties();
InputStream systemPropertiesStream = ClassLoader.getSystemResourceAsStream("my-system.properties");
if (systemPropertiesStream != null)
{
try
{
properties.load(systemPropertiesStream);
}
finally
{
systemPropertiesStream.close();
}
}
InputStream hostPropertiesStream = ClassLoader.getSystemResourceAsStream("my-system" + InetAddress.getLocalHost().getHostName() + ".properties");
if (hostPropertiesStream != null)
{
try
{
properties.load(hostPropertiesStream);
}
finally
{
hostPropertiesStream.close();
}
}
InputStream userPropertiesStream = ClassLoader.getSystemResourceAsStream("my-system" + System.getProperty("user.name") + ".properties");
if (userPropertiesStream != null)
{
try
{
properties.load(userPropertiesStream);
}
finally
{
userPropertiesStream.close();
}
}