覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Spring Boot - pom.xmlで設定したversion情報とかを取得したい

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にアクセスすればバージョン情報、アプリケーション名を取得することができます。