BT

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

| 作者: Michael Redlich フォローする 12 人のフォロワー , 翻訳者 h_yoshida フォローする 1 人のフォロワー 投稿日 2017年10月16日. 推定読書時間: 6 分 |

原文(投稿日: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と掛けたしゃれ)ですが、現時点での計画では、今年末のリリースを予定しています。

リソース

この記事を評価

採用ステージ
スタイル

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT