0

我在Spring的Property Replacement機制中有點迷失。可以說我有這個Java配置在Spring Java配置註解中使用佔位符

@Configuration 
@ComponentScan(basePackageClasses = Application.class) 
@PropertySources({ 
    @PropertySource("classpath:/config/default.properties") 
}) 
public class ApplicationConfig { 

@Bean 
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { 
    PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer(); 
    return pspc; 
} 

現在我想添加一個Spring數據註解@EnableMongoRepositories和定義掃描自定義basepackage,使用自定義的佔位符類似如下 @EnableMongoRepositories("${my.custom.repobasepackage}")。佔位符在我的default.properties中定義。

但是,此屬性無法在此處解決。當深入探索Spring的物業替代時,我可以看到它試圖解決財產問題,所以有可能這樣做。

但是,用於替換佔位符的底層Environment類不知道我的PropertyPlaceholderConfigurer,但只知道我的SystemProperties和我的VM-Props。 :-(

我可以看到,在org.springframework.context.annotation.ClassPathBeanDefinitionScanner#getOrCreateEnvironment.java#339(我使用Spring 4.0.1)我的 「PropertyPlaceholder」 已經到位,所以其不是在初始化排序的問題,但沒有被使用,因爲使用BeanDefinitionRegistry沒有實現接口EnvironmentCapable。在這裏,我的春天應用程序 - 語境的理解自舉是在年底。

任何人可以幫助我在這裏?是否有BeanDefinitionRegistry能夠提供使用我的Property Placeholder的Environment實例?

任何幫助是高度讚賞!我得到了你的餅乾! :-))

乾杯,斯特凡

回答

0

我想象@PropertySources(你只有一個的方式,所以你不需要包裝)被添加到該配置類處理Environment後,所以解決這些類的註釋本身就太晚了。您可以通過將my.custom.repobasepackage設置爲System屬性來驗證此情況。

作爲一種替代方案,我鼓勵您試用Spring Boot(在處理任何配置之前,application.properties已添加到Environment)。

相關問題