Spring Boot起動時、コンフィグ(環境)ファイルの内容を標準出力する

Spring Boot起動時、コンフィグ(環境)ファイルの内容を標準出力する

環境ごとにapplication.ymlを記述すると思います。Spring Boot起動時に環境ファイルの値を標準出力します。

ファイル

application.yml

aws:
    s3:
      region: ap-northeast-1
      bucket: my-test-bucket
      access_key_id: hoge
      secret_access_key: fuga

以下はapplicatoin.ymlを表すクラスです。

AppConfig.java

package jp.co.confrage.confdisp.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import jakarta.annotation.PostConstruct;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

@Configuration
@ToString
@RequiredArgsConstructor
@EqualsAndHashCode
@Slf4j
public class AppConfig {
    @Value("${aws.s3.region:ap-northeast-1}")
    private String region;

    @Value("${aws.s3.bucket:my-tset-bucket}")
    private String bucket;

    @Value("${aws.s3.access_key_id:xxxxx}")
    private String accessKeyId;

    @Value("${aws.s3.secret_access_key:yyyyy}")
    private String secretAccessKey;
 
    @PostConstruct
    void print() {
        log.info(toString());
    }
}

テスト

Spring Boot起動します。

  .   ____          _            __ _ _   
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \  
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / / 
 =========|_|==============|___/=/_/_/_/  
 :: Spring Boot ::                (v3.2.4)

2024-03-29T16:31:15.644+09:00  INFO 19060 --- [           main] j.c.c.confdisp.ConfDispApplication       : Starting ConfDispApplication using Java 21.0.1 with PID 19060 (C:\pana\javatest\springboottest\conf-disp\build\classes\java\main started by moriya-h5 in C:\pana\javatest\springboottest\conf-disp)
2022-03-29T16:31:15.648+09:00  INFO 19060 --- [           main] j.c.c.confdisp.ConfDispApplication       : No active profile set, falling back to 1 default profile: "default"
2022-03-29T16:31:17.188+09:00  INFO 19060 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2022-03-29T16:31:17.208+09:00  INFO 19060 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-03-29T16:31:17.208+09:00  INFO 19060 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.19]
2022-03-29T16:31:17.304+09:00  INFO 19060 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-03-29T16:31:17.308+09:00  INFO 19060 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1565 ms
2022-03-29T16:31:17.449+09:00  INFO 19060 --- [           main] j.co.confrage.confdisp.config.AppConfig  : AppConfig(region=ap-northeast-1, bucket=my-test-bucket, accessKeyId=hoge, secretAccessKey=fuga)
2022-03-29T16:31:17.923+09:00  INFO 19060 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path ''
2022-03-29T16:31:17.935+09:00  INFO 19060 --- [           main] j.c.c.confdisp.ConfDispApplication       : Started ConfDispApplication in 3.003 seconds (process running for 3.497)

excludeする

機密情報など一部標準出力したくない環境ファイルの情報はexcludeを指定して標準出力しないようにすることが可能です。

@ToString

↓

@ToString(exclude = {"accessKeyId", "secretAccessKey"})

ファイルを保存します。

テスト

Spring Boot起動します。

  .   ____          _            __ _ _   
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \  
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / / 
 =========|_|==============|___/=/_/_/_/  
 :: Spring Boot ::                (v3.2.4)

2024-03-29T16:41:03.852+09:00  INFO 20560 --- [           main] j.c.c.confdisp.ConfDispApplication       : Starting ConfDispApplication using Java 21.0.1 with PID 20560 (C:\pana\javatest\springboottest\conf-disp\build\classes\java\main started by moriya-h5 in C:\pana\javatest\springboottest\conf-disp)
2024-03-29T16:41:03.868+09:00  INFO 20560 --- [           main] j.c.c.confdisp.ConfDispApplication       : No active profile set, falling back to 1 default profile: "default"
2024-03-29T16:41:05.726+09:00  INFO 20560 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2024-03-29T16:41:05.748+09:00  INFO 20560 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2024-03-29T16:41:05.748+09:00  INFO 20560 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.19]
2024-03-29T16:41:05.840+09:00  INFO 20560 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2024-03-29T16:41:05.842+09:00  INFO 20560 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1874 ms
2024-03-29T16:41:05.938+09:00  INFO 20560 --- [           main] j.co.confrage.confdisp.config.AppConfig  : AppConfig(region=ap-northeast-1, bucket=my-test-bucket)
2024-03-29T16:41:06.446+09:00  INFO 20560 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path ''
2024-03-29T16:41:06.457+09:00  INFO 20560 --- [           main] j.c.c.confdisp.ConfDispApplication       : Started ConfDispApplication in 3.491 seconds (process running for 4.024)

下から3行目部分に標準出力されていますが、exclude指定したプロパティは標準出力されていないことが確認できます。

優先順位

application.ymlの設定値や、@Value内でデフォルト値を設定していますが優先順位があります。

  1. 環境変数
  2. application.yml
  3. 初期値

環境変数が設定されている場合、環境変数の値が一番優先されて設定されます。環境変数名は以下のように変換する必要があります。※環境変数を設定したらVSCodeなどは一旦閉じる必要があります

@Value 環境変数
(“${aws.s3.region:ap-northeast-1}”) AWS_S3_REGION

application.ymlにキーが存在して値が設定されている場合、application.ymlの値が設定されます。

application.ymlにキーが存在しない場合、@Valueで指定したデフォルト値が設定されます。

 

 

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました