BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース アクチュエータエンドポイントが改善されたSpring Boot 2.0

アクチュエータエンドポイントが改善されたSpring Boot 2.0

原文(投稿日:2017/08/31)へのリンク

Sprint Bootの次期リリースとなる2.0.0 M4では、改善されたアクチュエータエンドポイントインフラストラクチャが提供される予定だ。その最も重要な変更点としては、次のものがある。

  • RESTful WebサービスJerseyのサポート
  • リアクティブベースのWebアプリケーションWebFluxのサポート
  • 新しいエンドポイントマッピング
  • ユーザ定義エンドポイント作成の簡略化
  • エンドポイントのセキュリティ向上

Spring Bootのアクチュエータエンドポイントでは、Webアプリケーションとのインタラクションの監視が可能になった。これまではSpring MVCでのみサポートされていた。また、ユーザ定義のエンドポイント作成には、相当な量の追加コードと設定が必要だった。

エンドポイントマッピング

/beans/healthなどの組み込みエンドポイントが、デフォルトで/applicationのrootコンテキストにマップされるようになった。これにより、例えば前バージョンの/beans/application/beansでアクセスされるようになる。

ユーザー定義エンドポイントの作成

@Enpointアノテーションが新設されて、ユーザ定義のエンドポイントを作成するプロセスが単純化された。次の例ではpersonという名称のエンドポイントを生成する。(サンプルアプリケーション全体はGitHubで確認できる。)

    
@Endpoint(id = "person")
@Component
public class PersonEndpoint {

    private final Map<string, person=""> people = new HashMap<>();

    PersonEndpoint() {
        this.people.put("mike", new Person("Michael Redlich"));
        this.people.put("rowena", new Person("Rowena Redlich"));
        this.people.put("barry", new Person("Barry Burd"));
    }

    @ReadOperation
    public List getAll() {
        return new ArrayList<>(this.people.values());
    }

    @ReadOperation
    public Person getPerson(@Selector String person) {
        return this.people.get(person);
    }

    @WriteOperation
    public void updatePerson(@Selector String name, String person) {
        this.people.put(name, new Person(person));
    }

    public static class Person {
        private String name;

        Person(String name) {
            this.name = name;
        }

        public String getName() {
            return this.name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}
    </string,>

このエンドポイントでは、@ReadOperationおよび@WriteOperationアノテーションで定義された3つのメソッドを公開する。ソースコードを追加する必要はなく、エンドポイントは/application/person/application/person/{name}を経由してアクセスされる。このエンドポイントはJMX MBeanとしても自動的にデプロイされるので、JConsoleのようなJMXクライアントからアクセスすることも可能だ。

エンドポイントのセキュリティ向上

Spring Boot 2.0では、Webエンドポイントがデフォルトでセキュアになるように、これまでとは違うアプローチを選択している。webエンドポイントがデフォルトで無効になり、management.security.enabledプロパティが削除された。個々のエンドポイントは、次の例のようにapplication.propertiesファイル内の設定によって有効にできる。

    
endpoints.info.enabled=true
endpoints.beans.enabled=true
    

ただし、endpoints.default.web.enabledプロパティをtrueにセットすれば、すべてのアクチュエータとユーザ定義エンドポイントを公開することも可能だ。

PivotalのプリンシパルソフトウェアエンジニアであるStéphane Nicoll{氏は、アクチュエータエンドポイントを次のように説明してくれた。

InfoQ: アクチュエータエンドポイントをアップグレードして、JerseyとWebFluxをサポートしたことについて、どのように思われましたか?

Nicoll: 従来型のサーブレットベースの環境とリアクティブベースのWebアプリを同時にサポートすることは、特に広範な機能セットを扱う場合には難しい問題ですね。

InfoQ: Springは厳密でよく考えられたAPIを提供することで有名ですが、今回のリファクタリングはどのように扱われたのでしょう?

Nicoll: フレームワークチームでは、"spring-web"から多くの機能を共有する"spring-webmvc"と"spring-webflux"という取り組みを行なっています。機能の抽象化は難しい作業ですが、それを新たなレベルでもう一度やり直せたことはよかったと思っています。

InfoQ: アーキテクチャ上の原則としては、どのようなものを重視しましたか?

Nicoll: Spring Boot 2.0の基本は、機能構築に適した強固な基盤のセットアップにあります。この新しいエンドポイントアーキテクチャが、実用レベルの機能に向けた正しい方向に進むものと確信すると同時に、コミュニティからのフィードバックを期待しています。

InfoQ: GAのリリースはいつ頃を予定していますか?

Nicoll: まだ少し流動的(flux - webfluxと掛けたしゃれ)ですが、現時点での計画では、今年末のリリースを予定しています。

リソース

この記事を評価

採用ステージ
スタイル

この記事に星をつける

おすすめ度
スタイル

BT