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内でデフォルト値を設定していますが優先順位があります。
- 環境変数
- application.yml
- 初期値
環境変数が設定されている場合、環境変数の値が一番優先されて設定されます。環境変数名は以下のように変換する必要があります。※環境変数を設定したらVSCodeなどは一旦閉じる必要があります
@Value | 環境変数 |
---|---|
(“${aws.s3.region:ap-northeast-1}”) | AWS_S3_REGION |
application.ymlにキーが存在して値が設定されている場合、application.ymlの値が設定されます。
application.ymlにキーが存在しない場合、@Valueで指定したデフォルト値が設定されます。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^