

### 前提・実現したいこと

Spring Boot を用いた開発において、application.propertyを環境ごとに動的に変更したい。  
例）  
ローカル環境：application-local.property  
開発環境：application-dev.property  
本番環境：application-prod.property

### 環境

macOS  
IDE：STS  
言語：Java

### 発生している問題

application-local.propertyに設定内容を記載し、環境変数を設定しても、本ファイルが読み込まれず、正常に起動しない。  
→
application.propertyにリネームすると正常に起動して、APIも正常に動作するため、プロパティファイルの設定不備ではなく、プロパティファイルが読まれていないことが原因と考えています。  
以下に詳細を記載いたします。  
環境変数を読み込んで動的にapplication.propertyを切り替えて動作させるための設定を教えていただきたいです。

### 設定したこと

~./.bash_profileに、

[code]

    export SPRING_PROFILES_ACTIVE=local
    
[/code]

と記載し、

[code]

    source ~/.bash_profile
    
[/code]

で環境変数へ反映しています。printenvコマンドで

[code]

    SPRING_PROFILES_ACTIVE=local
    
[/code]

が表示されることは確認済みです。

### 試したこと

Javaプログラムから、

[code]

    Map<String, String> env = System.getenv();
    Iterator<String> ite1 = env.keySet().iterator();
    Iterator<String> ite2 = env.values().iterator();
    while (ite1.hasNext()) {
        System.out.println("変数名：" + ite1.next() + "[" + ite2.next() + "]");
    }
    System.out.println("---");
    String profiles = System.getenv("SPRING_PROFILES_ACTIVE");
    System.out.println(profiles);
    
    
[/code]

としていますが、

[code]

    変数名：****
    .
    .
    .
    変数名：****
    ---
    null
    
[/code]

となり、環境変数を読み込めていないようでした。


CC BY-SA 4.0
2021-01-22T15:12:55.163
73503
2023-08-06T02:08:20.943
43642
question
java macos spring-boot
環境変数SPRING_PROFILES_ACTIVEを使用して、application.propertyを動的に切り替えたい。


STS上でSpring Bootを実行しようとしたときの事象かと察します。

`~/.bash_profile` の設定が有効になるのは `bash` から起動した(つまりターミナルから起動した)アプリケーションだけです。  
おそらく、DockなどからSTSを起動しているのではないでしょうか。

採れる選択肢は3種類あるかなと思います。

1つめは、ターミナルからSTSを起動する方法です。  
この方法であれば、`.bash_profile` で設定している環境変数は引き継がれます。

2つめは、FinderやDock,
SpotlightなどGUIから起動した場合も有効になるような環境変数の設定を実施する方法です([例](https://qiita.com/homu-
konamilk/items/5886f3e48ffa658f4f78))。  
MacOS のバージョンによって設定方法が異なっているはずですので、質問にOSのバージョンを明記するのが良いかと考えます。  
(なお、この方法については、私は現在Macを所有していないので回答できません。他の方の回答を期待して下さい。)

3つめの選択肢は、STS上の起動オプションでprofileを指定してしまう方法です。  
Boot Dashboard から鉛筆アイコンをクリックしてプロジェクトの設定ダイアログを開くと、 Spring Boot タブに
profileを設定する箇所がありますので、ここに `local` と設定することで有効化されます。  
(ちなみに、この方法は環境変数に設定するわけではなく起動引数に `--spring.profiles.active` を設定するので、
`System.getenv("SPRING_PROFILES_ACTIVE");`
では拾えません。どうしても環境変数として設定したいのであれば、同ダイアログの Environment タブから設定することは可能です。)

[![設定箇所](https://i.stack.imgur.com/IAkaZ.png)](https://i.stack.imgur.com/IAkaZ.png)

* * *

また、別の話になりますが、プロパティファイルの拡張子は(少なくともデフォルトでは)`.property` ではなく `.properties`
です([参考: Profile Specific Files](https://docs.spring.io/spring-
boot/docs/2.6.5/reference/htmlsingle/#features.external-config.files.profile-
specific))。  
上記問題解消後はこちらも問題になるかもしれません。


CC BY-SA 4.0
2021-01-23T02:05:56.827
73510
2022-03-28T15:54:33.080
2022-03-28T15:54:33.080
2808
2808
73503
answer