エキサイト株式会社メディア事業部エンジニアの佐々木です。SpringBootのアプリケーション情報を生成し、取得活用する方法になります。
前提
Java Version
openjdk 17.0.1 2021-10-19 LTS OpenJDK Runtime Environment Corretto-17.0.1.12.1 (build 17.0.1+12-LTS) OpenJDK 64-Bit Server VM Corretto-17.0.1.12.1 (build 17.0.1+12-LTS, mixed mode, sharing)
Gradle Version
------------------------------------------------------------ Gradle 7.5 ------------------------------------------------------------ Build time: 2022-07-14 12:48:15 UTC Revision: c7db7b958189ad2b0c1472b6fe663e6d654a5103 Kotlin: 1.6.21 Groovy: 3.0.10 Ant: Apache Ant(TM) version 1.10.11 compiled on July 10 2021 JVM: 17.0.1 (Amazon.com Inc. 17.0.1+12-LTS) OS: Mac OS X 11.5.2 x86_64
設定
ビルドツールにはGradleを使用しています。
build.gradleに設定を追記
下記の設定を追加します。
springBoot { buildInfo() }
これを追加すると、 ./gradlew bootBuildInfo
タスクが使用できるようになります。
タスクの実行
下記、タスクを実行します。
./gradlew bootBuildInfo
実行すると、下記ファイルが生成されます。
./build/resources/main/META-INF/build-info.properties build.artifact=media-backend-seed build.group=com.example build.name=exmaple build.time=2022-09-19T09\:28\:56.398216Z build.version=0.0.1-SNAPSHOT
これは、 src
フォルダではなく、 build
フォルダの方に作成されます。
アプリケーションから使えるようにする
アプリケーションから使えるようにするには、SpringのDIコンテナに登録する必要があります。
設定
application.ymlに先程の resources/main/META-INF/build-info.properties
を読み込ませる設定を記述します。
spring: config: import: 'classpath:META-INF/build-info.properties'
DIコンテナへの登録
DIコンテナへの登録を行います。
@ConstructorBinding @RequiredArgsConstructor @ConfigurationProperties(prefix = "build") @Getter public class BuildInfoProperty { private final String artifact; private final String group; private final String name; private final String time; private final String version; }
上記でDIコンテナの登録が完了しています。
REST APIで応答する
登録したものをREST APIを通して出力してみます。 下記コードをControllerに記述します。
@RestController @RequestMapping @RequiredArgsConstructor public class RootController { private final BuildInfoProperty buildInfoProperty; // DIに登録されたものを取り出す @GetMapping public Object index(){ return buildInfoProperty; } }
$ curl http://localhost:8080/ { "artifact": "example", "group": "jp.co.excite.", "name": "example", "time": "2022-09-19T09:17:10.024553Z", "version": "0.0.1-SNAPSHOT" }
まとめ
SpringBootには標準でこのように内部情報を出力する機能がついており、DIすることでアプリケーションから使うことが可能です。Git等との連携もできるようになっていますので、別途記載したいとおもいます。
最後に
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
カジュアル面談はこちらになります! meety.net
募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com