Spring Bootでアプリケーション構築した際に、pom.xmlで定義したバージョン情報等をアプリ側でも利用したい場合があります。
その際の利用方法は以下の通り。
以下は、pom.xmlの<project><artifactId>
と<project><version>
を利用する例です
今回利用するpom.xmlは以下のような内容になっているものとします
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>sample.web.app</groupId> <artifactId>sample-app</artifactId> <version>1.0.0.0</version> ・・・ </project>
application.ymlへのプロパティの定義
application.ymlで pom.xmlの情報を受け取るためのプロパティを定義します。
- @project.name@ ・・・
<project><artifactId>
の値で置換されます - @project.version@ ・・・
<project><version>
の値で置換されます
■記述例
info: application.appName: @project.name@ application.version: @project.version@
上記記述をしておくとMavenでビルドをした際に自動的にpom.xmlの記述内容で値が置換されます
Actuatorで情報取得
(Actuatorが有効な状態で)Spring Bootのアプリケーション起動後にhttp://localhost:8080/info
のURLにアクセスすると
以下の結果が返ってきます
{"application":{"appName":"sample-app","version":"1.0.0.0"}}
Javaアプリ内で情報取得する
以下のコードを書くことで対象のバージョン情報やアプリケーション名が紐づく変数にインジェクションされます
import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component @Data public class AppContext { @Value("${info.application.appName}") private String appName; @Value("${info.application.version}") private String version; }
以下のコードでも可能です。
import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @Component @ConfigurationProperties(prefix="info.application") public class AppContext { private String appName; private String version; }
対象のメンバに紐づくgetterにアクセスすればバージョン情報、アプリケーション名を取得することができます。