2014-06-18 34 views
0

我有一個關於嘗試向我的spring mvc控制器注入環境變量的問題。試圖加載環境變量的春天

我有一個環境變量如下...

POS_MANAGER_SERVER_REPORTING = MYSERVER

在我的Spring應用程序上下文我有...

<bean id="propertyConfigurer" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
    p:systemPropertiesModeName="SYSTEM_PROPERTIES_MODE_OVERRIDE" 
    p:searchSystemEnvironment="true"/> 

<bean name="posManagerController" 
    class="com.mycompany.reporting.controller.PosManagerController" 
    p:posManagerServer="${POS_MANAGER_SERVER_REPORTING}" />  

當我沒有定義的系統變量在websphere中,應用程序無法正常啓動。當我添加它所做的變量。但由於某些原因,注入到我的控制器中的值爲空。

有人可以幫我解決這裏可能出現的問題嗎?即爲什麼環境變量未正確加載?

只是爲了給你更多的信息,Controller使用@Controller註解加載到子上下文(-servlet.xml)中,但在父上下文(applicationContext.xml)中,我也有如上面出現的控制器定義。我的理解是,春天足夠聰明,能夠處理這個問題。我列出了這些信息,以防萬一這可能是問題的原因。

感謝

+0

你可以顯示你的'posManagerServer'部分控制器嗎? –

+0

爲什麼你在這兩種情況下都擁有該控制器?你真的應該只保留'-servlet.xml'部分並在那裏處理'posManagerServer'(使用'@Value'或類似的東西)。 –

+0

安德烈,使用@Value我可以得到一個系統環境變量? – Richie

回答

1

引用從documentation

此外,BeanFactoryPostProcessor的每個容器作用域。這隻有在使用容器層次結構時纔有意義。如果您在一個容器中定義了一個BeanFactoryPostProcessor,它將只應用於該容器中的bean定義。一個容器中的Bean定義將不會由另一個容器中的BeanFactoryPostProcessors進行後處理,即使這兩個容器都是同一層次結構的一部分。

所以,你需要一個PropertyPlaceholderConfigurer-servlet.xml文件,使其工作。

+1

您需要'@Value(「$ {POS_MANAGER_SERVER_REPORTING}」) \t私人字符串posManagerServer;'在'PosManagerController'和'-servlet.xml'中的'PropertyPlaceholderConfigurer' –