エキサイト株式会社エンジニアの佐々木です。SpringBootではapplication.ymlなどの設定情報を読み込む方法がいくつかあるのでまとめます。
前提
$ java --version openjdk 17.0.10 2024-01-16 LTS OpenJDK Runtime Environment Corretto-17.0.10.7.1 (build 17.0.10+7-LTS) OpenJDK 64-Bit Server VM Corretto-17.0.10.7.1 (build 17.0.10+7-LTS, mixed mode, sharing) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.2.3)
設定ファイル一覧
設定
下記の3ファイルになります。
- application.yml - application-a.yml - application-b.yml - application-c.yml
コード
リクエストされたら、application.ymlで設定されてデータが返却されます。
@RestController @RequestMapping("yml") @RequiredArgsConstructor @Slf4j public class ApplicationYmlController { @Value("${jp.co.excite.name}") private String value; @GetMapping("") public String applicationYml() { return value; } }
起動引数で設定される値を変える
- 引数なし
java -jar yml-test.jar curl http://localhost:8080/yml default
引数がない場合は、application.yml
が使用されます。
- 引数 --spring.profiles.active=a
java -jar yml-test.jar --spring.profiles.active=a curl http://localhost:8080/yml a
引数がある場合は、デフォルトのプロファイルと指定されたプロファイルが使用されます。
この場合は、application.yml
とapplication-a.yml
が読み込まれます。
- 引数 --spring.profiles.active=b
java -jar yml-test.jar --spring.profiles.active=b curl http://localhost:8080/yml b
別のプロファイルを指定してもちゃんと読み込まれています。
- 引数 --spring.profiles.active=a,b
java -jar yml-test.jar --spring.profiles.active=a,b curl http://localhost:8080/yml b java -jar yml-test.jar --spring.profiles.active=b,a curl http://localhost:8080/yml a
複数指定する場合は、後勝ち
になります。指定された順番で上書きしていくイメージです。
補足./gradlew bootRun の場合
gradle
./gradlew bootRun --args='--spring.profiles.active=a'
設定ファイルの中で指定する場合
設定ファイルの中でも、他の設定ファイルを読み込むことが可能です。spring.config.import
を使用します。
spring: config: import: classpath:${プロファイルのファイル}
上記で指定できます。こちらも後勝ち
なので、設定には注意が必要です。
まとめ
SpringBootでは、環境によって設定ファイルをリネーム、設定の書き換えなどの操作は、基本的に行わずに起動引数によって解決するようになっています。これはとても便利なので、多用していきたいところです。
さいごに
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
募集職種一覧はこちらになります!(カジュアル面談もぜひ!) www.wantedly.com