2016-09-26 123 views
2

application.propertiesファイル内でSpringプロパティを指定しました。どのように私は環境変数からそれらのプロパティを設定できますか?ここでspring - application.propertiesファイルの中から環境変数を読み込みます

は、私が試したものですが、動作していないよう:

application.properties

spring.datasource.url=jdbc:postgresql://#{ systemProperties['DATABASE_HOST']}:5432/dbname 
spring.datasource.username = postgres 
spring.datasource.password = postgres 

答えて

3

${...}構文を使用してSpringプロパティを参照するのと同じ方法で、環境プロパティを参照できます。あなたのケースでは

spring.datasource.url=jdbc:postgresql://${DATABASE_HOST}:5432/dbname 
+0

私は環境変数名を持っています:userとvalue:passです。私のapplication.propertiesでは、datasource.username = $ {user}を使用しました。 – Jesse

+0

環境変数が設定されていない場合にデフォルト値を設定する方法はありますか? –

+0

デフォルト値をapplication.ymlに入れることができます。 envプロパティがそれらを上書きします。優先度が高い –

2

あなたがする必要はありません。 Springブートは環境を初期化するときに、application.propertiesファイルとシステムレベルの変数の両方を取得し、それらを結合します。 Springがそれを取得する場所の完全なリストは、hereです。具体的には、9)10)です。

+0

は素晴らしいthatsのが、その場合には、私は(私はここでは、セットアップのためにしなければならない)私自身のプロパティ名を使用することはできません – Oleg

+0

ただ、周りにそれらをシフトし、 'DATABASE_HOSTを割り当てます'〜' SPRING_DATASOURCE_URL'などへ – rorschach

1

ご存じのように、spring-bootは、Datasourceの詳細が特定の変数名を使用することを期待しています。

1 /環境からの変数を使用する必要がある場合、Cloud FoundryやHorukuなどのクラウドサービスへのデプロイメントから来る場合は、スプリングブートが必要ですボックスの外に配管の割当てを処理する-starter-cloud-connector。良い読み取りがこの

2 /代わりの春ブーツ独自の自動魔法のような配線器具に頼るを通してあなたを歩く(Binding to Data Services with Spring Boot in Cloud Foundry記事とDeploying to the cloudドキュメントである、あなたはどのようにデータソースの情報を上書きするカスタムコンフィグレーションBeanを作成することができます人口のある関係のアノテーションを説明する良い読み取りがここで見つけることができます:。。Spring Java Config Documentation - @BeanConfiguration JavaDOC上記のあなたの例に基づいて、ここで私は吐き捨てるものです:

@Configuration 
public class MyDataSourceConfig { 

    @Bean 
    @Primary 
    public DataSource getDataSource() { 

     String url = "jdbc:postgresql://" + System.getenv("DATABASE_HOST") + ":5432/dbname"; 
     String username = "postgres"; 
     String password = "postgres"; 
     String driverClassName = "org.postgresql.Driver"; 

     /* 
     * Create the datasource and return it 
     * 
     * You could create the specific DS 
     * implementation (ie: org.postgresql.ds.PGPoolingDataSource) 
     * or ask Spring's DataSourceBuilder to autoconfigure it for you, 
     * whichever works best in your eyes 
     */ 

     return DataSourceBuilder 
       .create() 
       .url(url) 
       .username(username) 
       .password(password) 
       .driverClassName(driverClassName) 
       .build(); 
    } 
} 

ちょうど春に、あなたはいつもの充てる上書きすることができますことを覚えておいてください少し掘り下げたデフォルトの動作!

これが役に立ちます。

関連する問題