、から適応
<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="locations">
<list>
<value>classpath:site/properties/default/placeholder.properties
</value>
<value>file:///site/properties/${env.name}/placeholder.properties
</value>
</list>
</property>
</bean>
。例:
#Test url
test.url=http://test.url.com
#Production URL
prod.url=http://prod.url.com
私はそれぞれの環境で「entorn」という名前のシステムプロパティ(アプリケーションサーバーの起動スクリプトでは、JVMの呼び出しに-D引数)を定義しました。このプロパティの値は、テスト環境では「テスト」、プロダクション環境では「プロード」です。
それから私は私の「propertyConfigurer」豆定義された:あなたは、「テスト」環境で、あなたのコードを実行していて、の値を取得したい場合は
package es.indra.ccma.config;
import java.util.Properties;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
public class EnvironmentPropertyPlaceholderConfigurer extends
PropertyPlaceholderConfigurer {
private String environment;
final private static String ENV_SYSTEM_PROPERTY = "entorn";
public EnvironmentPropertyPlaceholderConfigurer() {
environment = System.getProperty(ENV_SYSTEM_PROPERTY);
if (environment == null) {
//default environment
environment = "test";
}
}
protected String resolvePlaceholder(String placeholder, Properties props) {
final String envPlaceholder = environment + "." + placeholder;
if (props.containsKey(envPlaceholder)) {
return props.getProperty(envPlaceholder);
} else {
return props.getProperty(placeholder);
}
}
}
:
<bean id="propertyConfigurer" class="es.indra.ccma.config.EnvironmentPropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:ccma.properties</value>
</list>
</property>
</bean>
EnvironmentPropertyPlaceholderConfigurerコードを"url"プロパティの場合、propertyConfigurerはプロパティファイル内で "test.url"を探し、 "test.url"プロパティが見つからない場合は "url"プロパティを探します。
これは私の考えではありませんI followed this tutorialこれを実現するには
ニースで、環境設定が固定ルートの場所にあることを実際には要求しません。/ site/propertiesは$ {env.applicationRoot}/configと同じくらい簡単です。好き – ptomli