2017-08-07 12 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

ブライアンに感謝します。 @ConfigurationPropertiesの引数として$ {environment}を使用していても、動作していません。プログラムの中のプログラム/ VM引数を使って渡すことができる動的な引数を使うというトリックはありますか? Springアプリケーションでも同じことをしていますが、うまくいきますが、Springブートの場合は動作しません。 – Saurabh

答えて

0

ここでは問題である:あなたは@PropertySourceと.yml使用することはできません。boot-features-external-config-yaml-shortcomings

YAMLファイルはloaできません@PropertySourceアノテーションを使用して除外されます。そのように値をロードする必要がある場合は、プロパティファイルを使用する必要があります。

これを行うには、.propertiesに変換する必要があります。

+0

ブライアンに助けてくれてありがとう。 @PropertySource( "environmentDetails.yml")にコメントしました。プレフィックスにハードコードされた値を使用していればうまくいきます。 @ConfigurationProperties(接頭辞= "envName")。しかし、プレースホルダにプレースホルダ値を使用しているときなど。 @ConfigurationProperties(接頭辞= "$ {envName}")。それは私に誤りを与えている。プレフィックスを動的な値で使用する方法はありますか?要件に応じて、環境名を持つソースから多数のファイルを取得し、ファイル名に由来する環境ごとにプロパティを選択する必要があります。したがって、環境名は動的になります。 – Saurabh

関連する問題