我正在使用純Java配置(無xml)使用Spring編寫Web應用程序。我想要一個解決方案來顯示各種環境特定的屬性,這取決於我的應用程序運行的位置(dev/test/prod)。使用Spring XML配置,並通過XML的PropertyPlaceholderConfigurer,我會做這樣的事情:使用純java彈簧配置訪問環境屬性
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:shift.properties</value>
<value>classpath:shift-${env}.properties</value>
</list>
</property>
</bean>
在Java配置中,我想要做的基礎是:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.values.shift" })
public class WebConfig extends WebMvcConfigurerAdapter {
@Autowired
private static Environment springEnv;
@Bean
public static PropertyPlaceholderConfigurer propertyConfigurer() throws IOException {
PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer();
System.out.println("Environment:" + env.toString());
props.setLocations(
new Resource[] {
new ClassPathResource("shift.properties"),
new ClassPathResource("shift-" + springEnv.getProperty("env") + ".properties")}
);
props.setIgnoreResourceNotFound(true);
return props;
}
我在Tomcat上將-Denv = localhost設置爲VM參數。我也有它設置爲我的mac系統屬性(即在終端輸出本地主機echo $ env)
我似乎無法弄清楚如何訪問使用純Java的環境變量。我試過以下內容:
- 使用Spring Environment,如上面的代碼所示。
- @Value(「#{systemEnvironment ['env']}」)爲新變量並以字符串形式訪問它
- @Value(「#{systemProperties ['env']}」)和訪問它作爲一個字符串
- @Value(「$ {ENV}」)的一個新的變量和訪問它作爲一個字符串
上述所有回報空的。很高興看到一個如何在Spring中使用純Java配置訪問環境變量的工作示例。
感謝您的幫助。
是位於shift-local.properties文件中的'env'屬性,或者您只是嘗試使用@Value(「$ {env}」)在String字段中獲取'local'? – freakman 2014-10-07 12:59:25
我試圖讓字符串字段中的'local'。然後,該字符串將形成我的環境特定屬性文件名的一部分。 'env'是傳入的變量名稱。 – Gabe 2014-10-07 13:21:15