2017-08-07 74 views
1

我有一個要求將動態環境名稱作爲配置屬性的前綴。我將通過命令行將環境作爲VM參數傳遞,並且應該爲該環境加載所有屬性。如何實現動態@ConfigurationProperties前綴

我的配置

@Configuration 
@EnableConfigurationProperties 
@PropertySource("environmentDetails.yml") 
@ConfigurationProperties(prefix="${environment}") 
public class ConfigurationBean { 

    private String brokerUrl; 
    private String queueName; 
    private String receiverUserName; 
    private String receiverPassword; 

    public String getBrokerUrl() { 
     return brokerUrl; 
    } 
    public void setBrokerUrl(String brokerUrl) { 
     this.brokerUrl = brokerUrl; 
    } 
    public String getQueueName() { 
     return queueName; 
    } 
    public void setQueueName(String queueName) { 
     this.queueName = queueName; 
    } 
    public String getReceiverUserName() { 
     return receiverUserName; 
    } 
    public void setReceiverUserName(String receiverUserName) { 
     this.receiverUserName = receiverUserName; 
    } 
    public String getReceiverPassword() { 
     return receiverPassword; 
    } 
    public void setReceiverPassword(String receiverPassword) { 
     this.receiverPassword = receiverPassword; 
    } 
} 

environmentDetails.yml

spring: 
    profiles.active: default 
--- 
spring: 
    profiles: default 

environment: 
    brokerUrl: http://ip:port 
    queueName: testQueue 
    receiverUserName: testuser 
    receiverPassword: password 
+0

問題是什麼? https://stackoverflow.com/help/how-to-ask – Brian

+0

謝謝Brian。當我使用$ {environment}作爲@ConfigurationProperties的參數時,它不起作用。是否有任何技巧使用動態參數,我可以通過程序中的程序/ VM參數傳遞?我在Spring應用程序中做了同樣的事情,它工作正常,但在Spring引導的情況下,它不起作用。 – Saurabh

回答

0

這裏是問題:boot-features-external-config-yaml-shortcomings

:你不能@PropertySource使用.yml

YAML文件不能是loa ded通過@PropertySource註釋。因此,如果您需要以這種方式加載值,則需要使用屬性文件。

你必須轉換爲.properties才能做到這一點。

+0

感謝Brian的幫助。我評論了@PropertySource(「environmentDetails.yml」),如果我使用硬編碼的值作爲前綴,它工作正常。 @ConfigurationProperties(前綴= 「ENVNAME」)。但是,當我使用佔位符值作爲前綴時,例如@ConfigurationProperties(前綴= 「$ {ENVNAME}」)。它給了我一個錯誤。有什麼方法可以使用動態值的前綴?根據要求,我將有許多來自環境名稱來源的文件,並且我需要根據來自文件名的環境選擇屬性。所以環境名稱將是動態的。 – Saurabh