2017-09-30 56 views
0

我正試圖遷移一個使用PropertyPlaceholderConfigurer的Spring應用程序來解析它的bean聲明中的所有XML佔位符,以便使用Spring雲,我可以檢查配置服務器是否已聯繫並用從git存儲庫生成的相應數據進行響應,但是,在BeanFactoryPostProcessor註冊期間的服務器啓動時,XML上下文無法解析佔位符。如何在聲明任何XML bean之前註冊Spring Cloud配置服務器?

我認爲通過刪除bean定義:

<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
    <property name="ignoreUnresolvablePlaceholders" value="false" /> 
    <property name="properties"> 
     <bean class="org.apache.commons.configuration.ConfigurationConverter" 
      factory-method="getProperties"> 
      <constructor-arg> 
       <ref bean="domainConfiguration" /> 
      </constructor-arg> 
     </bean> 
    </property> 
</bean> 

並添加配置客戶端和相應的環境變量的佔位符應該工作POM的依賴,但他們不。

我可以手動將配置服務器設置爲更高優先級嗎?

或者作爲一種選擇,教PropertyPlaceholderConfigurer消費配置服務器?

+0

作爲一種替代方法(教PropertyPlaceholderConfigurer來使用配置服務器),您可以使用接口EnvironmentAware,併爲要注入的Environment變量(不使用@Autowired)實現setter和getter,並覆蓋方法解決所述佔位符。 –

回答

1

如果你使用的是spring-cloud-config,這應該是開箱即用的。當spring將構建/啓動ApplicationContext時,首先它將創建一個引導(父)上下文,這將在創建主上下文之前發生。獲取配置服務器的屬性應該在引導階段發生,以便在正常上下文中創建的bean應該能夠獲得這些屬性。

查看示例文檔的客戶端使用部分,並查看bootstrap.properties文件的用法。

如果沒有彈簧啓動(它應該工作的W/O一樣好,但文檔是彈簧啓動中心),檢查出this repothis GitHub issue,您將需要一個ConfigServicePropertySourceLocator

+0

的確,這個項目並沒有使用spring-boot,我懷疑這是PPC與spring-cloud-config干涉的結果。 –

相關問題