2017-04-04 142 views
2

有沒有可能從java配置文件加載彈性配置文件?從java配置文件加載額外的彈簧配置文件

我知道我可以使用-Dspring.profile.active參數並在application.properties中將配置文件添加到spring.profiles.include

我需要的是能夠從java配置文件激活配置文件。我創建了PropertyPlaceholderConfigurer,我在其中添加了一些自定義屬性文件,其中還包含屬性spring.profiles.include,所有屬性均已加載並且工作正常,但spring不會使用此屬性激活任何包含屬性的配置文件。

@Bean 
public static PropertyPlaceholderConfigurer ppc() throws IOException { 
    PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); 
    ppc.setLocations(new ClassPathResource("properties/" + property + ".properties")); 
    ppc.setIgnoreUnresolvablePlaceholders(true); 
    return ppc; 
} 

回答

1

活性彈簧剖面,在通過下列配置屬性來定義:spring.profiles.active:

您應該列出所有通過上述配置鍵導入他們激活的配置文件的文件。

EDIT

首先,作爲每official documentation配置spring.profiles.include更適合無條件加入活性譜。

其次,我可以假設PropertyPlaceholderConfigurer不適合你想要達到的目的。官方文件列出了您可以使用的方式Externalize Configuration。你可以嘗試使用@PropertySource

@PropertySources({ 
     @PropertySource(value = "classpath:application.properties"), 
     @PropertySource(value = "classpath:other.properties", ignoreResourceNotFound = true) 
}) 
public class Application { 
     ... 
    } 
} 

此外,您可以嘗試描述here列出內部application.properties財產spring.config.location其他屬性的文件。

+0

我試過'spring.profiles.active'和'spring.profiles.include'。當它包含默認的application.properties或配置文件特有的屬性文件時,它會自動工作,但是如果我使用PropertyPlaceholderConfigurer加載它,它會看到此屬性,但它不會激活它的任何配置文件。 –

+0

你是絕對正確的。使用'spring.profiles.include'比重寫'spring.profiles.active'更適合您的需求。我認爲問題是添加一個「PropertyPlaceholderConfigurer」類型的新bean並不是正確的方法。我會編輯我的答案。 –