2017-01-18 4 views
4

私はSpring Boot Actuatorを既存のインフラストラクチャに統合しようとしています。これを行うには、ステータスメッセージをカスタマイズする必要があります。たとえば、アプリケーションが正常に動作している場合は、ヘルス・アクチュエータのエンドポイントから「HAPPY」という200文字のテキスト・ボディを返す必要があります。スプリング・ブート・アクチュエータ:カスタマイズされた状態をプレーン・テキストにしていますか?

このようなカスタマイズは現在可能ですか? Statusクラスは最終的なものなので拡張できませんが、それはうまくいくと思います。

答えて

1

スプリングブートはHealthAggregatorを使用して、個々のヘルスインジケータのすべてのステータスをアプリケーション全体の単一の状態に集約します。あなたは、ブートのデフォルトのアグリゲータ、OrderedHealthAggregatorにその委任するカスタムアグリゲーターをプラグインし、その後HAPPYUPをマップすることができます。

@Bean 
public HealthAggregator healthAggregator() { 
    return new HappyHealthAggregator(new OrderedHealthAggregator()); 
} 

static class HappyHealthAggregator implements HealthAggregator { 

    private final HealthAggregator delegate; 

    HappyHealthAggregator(HealthAggregator delegate) { 
     this.delegate = delegate; 
    } 

    @Override 
    public Health aggregate(Map<String, Health> healths) { 
     Health result = this.delegate.aggregate(healths); 
     if (result.getStatus() == Status.UP) { 
      return new Health.Builder(new Status("HAPPY"), result.getDetails()) 
        .build(); 
     } 
     return result; 
    } 

} 

あなたはレスポンスのフォーマットを完全に制御をしたい場合は、あなたがする必要があります独自のMVCエンドポイント実装を記述します。 Springブートで既存のHealthMvcEndpointクラスをスーパークラスとして使用し、そのinvokeメソッドをオーバーライドすることができます。

+0

実際、これは私の質問には答えません。これはまだJSON構造体を返します。私はプレーンテキストの文字列 "HAPPY"とそれ以外は必要ありません。このaggregate()はHealthオブジェクトを返すため、これを行う方法はありません。健康と状態はどちらも最終的なので、私はその行動をカスタマイズする方法がわかりません。 – donahchoo

関連する問題