Spring Boot を使って開発していると、アプリケーションのバージョン番号やビルドタイムスタンプなどのビルド情報を取得したくなることがあります。これらの情報は、特にデバッグや運用環境での管理に役立ちます。本記事では、Spring Boot アプリケーション内で Maven のバージョン番号やビルドタイムスタンプを簡単に取得する方法を紹介します。
1. なぜビルド情報が重要なのか?
アプリケーションを運用する際、以下の情報を追跡することが非常に重要です。
- バージョン番号: アプリケーションのリリース管理に役立ちます。特定のバージョンで発生したバグをトラッキングするためには、バージョン番号を簡単に確認できることが重要です。
- ビルドタイムスタンプ: 開発の途中でビルドを行った日時が記録されることで、問題発生時にどのビルドが問題を引き起こしているのかを追跡する手助けになります。
2. Mavenを使ってビルド情報を管理する
Maven では、ビルド時にプロジェクトのバージョン番号やビルドタイムスタンプを自動的に取得することができます。これらの情報は pom.xml
ファイルを介して管理され、Spring Boot アプリケーションで簡単に参照することができます。
2.1 pom.xml
の設定
まず、Maven のビルド情報を参照できるように pom.xml
を設定します。次の設定を追加して、ビルドのタイムスタンプとバージョン番号をプロジェクトで使えるようにします。
1 2 3 4 |
<properties> <build.timestamp>${maven.build.timestamp}</build.timestamp> <maven.build.timestamp.format>yyyyMMdd-HHmmss</maven.build.timestamp.format> </properties> |
この設定で、例えば 20250219-130529
のようなタイムスタンプが生成されます。
3. Spring Bootでビルド情報を取得する
Maven で生成したビルド情報を Spring Boot アプリケーション内で使用する方法を見ていきます。
3.1 application.properties
にプロパティを追加
application.properties
ファイルに、Maven プロパティを使ってアプリケーションのバージョンとビルドタイムスタンプを設定します。次のようにプロパティを設定することで、アプリケーション内でこれらの情報にアクセスできます。
1 2 |
app.version = @project.version@ app.build.time = @timestamp@ |
3.2 GlobalControllerAdvice クラスでビルド情報を表示
次に、Spring Boot アプリケーションでビルド情報を表示するために、@ControllerAdvice
を使ってアプリケーション全体で共通の処理を実装します。このクラスは、リクエストに対してバージョン番号とビルドタイムスタンプをフォーマットして、全てのコントローラーで利用できるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ControllerAdvice; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; @ControllerAdvice public class GlobalControllerAdvice { @Value("${app.version}") private String appVersion; @Value("${app.build.time}") private String buildTimestamp; @ModelAttribute public void addAppVersionAndBuildDateToModel(Model model) { try { // Assuming buildTimestamp is in the format "yyyyMMdd-HHmmss" (UTC) SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-HHmmss"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); Date buildDate = sdf.parse(buildTimestamp); // Format the build date in Tokyo time SimpleDateFormat sdfTokyo = new SimpleDateFormat("yyyyMMddHHmmss"); sdfTokyo.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo")); String buildDateInTokyoStr = sdfTokyo.format(buildDate); // Combine version with build date in Tokyo time String versionWithBuildDate = appVersion + "-" + buildDateInTokyoStr; model.addAttribute("version", versionWithBuildDate); } catch (Exception e) { e.printStackTrace(); } } } |
このクラスは、アプリケーション全体のモデルに version
属性を追加し、version
にバージョン番号とタイムスタンプを結合した値を設定します。この値は、全てのビューで利用可能になります。
4. 結果の表示
@ControllerAdvice
で設定したビルド情報は、アプリケーション全体で利用できます。例えば、Thymeleaf テンプレートを使って、次のように簡単に表示することができます。
1 2 |
<!-- Thymeleafテンプレートでバージョンを表示する例 --> <p>現在のバージョン: <span th:text="${version}"></span></p> |
このように、全てのリクエストに対して version
の値が自動的に埋め込まれ、バージョン番号とビルドタイムスタンプが簡単に確認できるようになります。たとえば、表示される内容はこんな感じです:
1 |
現在のバージョン: 1.0.0-20230219101500 |
これで、アプリケーションのビルド情報を簡単に確認でき、バージョン管理やデバッグ作業がよりスムーズになります。
5. まとめ
この記事では、Spring Boot アプリケーションで Maven のバージョン番号とビルドタイムスタンプを取得し、アプリケーション内で活用する方法を紹介しました。これにより、ビルド情報を効果的に管理し、運用やデバッグの際に役立てることができます。ぜひ、今回の方法を実践して、開発や運用の効率化を実現してください。
エコモットでは、Spring Bootをはじめとする最新技術を駆使して、
IoTに関連する多彩なプロジェクトに取り組んでいます。
私たちと一緒に、革新的なモノづくりに挑戦し、未来を創る仲間を募集しています。