1. 概要

この簡単な記事では、Spring Bootアクチュエータの /infoエンドポイントをカスタマイズする方法を見ていきます。

Bootのアクチュエータとその設定方法の詳細については、この記事を参照してください。

2. /infoの静的プロパティ

アプリケーションの名前やバージョンが長期間変更されないなどの静的な情報がある場合は、その詳細をapplication.propertiesファイルに追加することをお勧めします。

## Configuring info endpoint
info.app.name=Spring Sample Application
info.app.description=This is my first spring boot application
info.app.version=1.0.0

このデータを/infoエンドポイントで利用できるようにするために必要なのはこれだけです。 Springは、infoで始まるすべてのプロパティを/infoエンドポイントに自動的に追加します。

{
  "app": {
    "description": "This is my first spring boot application",
    "version": "1.0.0",
    "name": "Spring Sample Application"
  }
}

3. /infoの環境変数

次に、 /infoエンドポイントでEnvironment変数を公開しましょう。

info.java-vendor = ${java.specification.vendor}

これにより、Javaベンダーが /infoエンドポイントに公開されます。

{
  "app": {
    "description": "This is my first spring boot application",
    "version": "1.0.0",
    "name": "Spring Sample Application"
  },
  "java-vendor": "Oracle Corporation",
}

すべての環境変数は、 /envエンドポイントですでに使用可能であることに注意してください。 ただし、同じことが /infoエンドポイントでもすぐに公開される可能性があります。

4. 永続層からのカスタムデータ

それでは、さらに一歩進んで、永続ストレージからいくつかの有用なデータを公開しましょう。

これを実現するには、 InfoContributor インターフェイスを実装し、 contribute()メソッドをオーバーライドする必要があります。

@Component
public class TotalUsersInfoContributor implements InfoContributor {

    @Autowired
    UserRepository userRepository;

    @Override
    public void contribute(Info.Builder builder) {
        Map<String, Integer> userDetails = new HashMap<>();
        userDetails.put("active", userRepository.countByStatus(1));
        userDetails.put("inactive", userRepository.countByStatus(0));

        builder.withDetail("users", userDetails);
    }
}

まず、実装クラスを@Componentとしてマークする必要があります。 次に、 contribute()メソッドに提供されるInfo.Builderインスタンスに必要な詳細を追加します。

このアプローチは、 /infoエンドポイントに公開できるものに関して多くの柔軟性を提供します。

{
  ...other /info data...,
  ...
  "users": {
    "inactive": 2,
    "active": 3
  }
}

5. 結論

このチュートリアルでは、 /infoエンドポイントにカスタムデータを追加するさまざまな方法について説明しました。

git情報/infoエンドポイントに追加する方法についても説明していることに注意してください。

いつものように、この記事の完全なソースコードは、GitHubにあります。