プッシュ通知と Spring Cloud Bus

多くのソースコードリポジトリプロバイダー(Github、Gitlab、Gitea、Gitee、Gogs、Bitbucket など)は、Webhook を介してリポジトリの変更を通知します。プロバイダーのユーザーインターフェースを介して、関心のある URL および一連のイベントとして Webhook を構成できます。たとえば、Github (英語) は、コミットのリストと push に設定されたヘッダー(X-Github-Event)を含む JSON 本文を使用して Webhook への POST を使用します。spring-cloud-config-monitor ライブラリへの依存関係を追加し、構成サーバーで Spring Cloud Bus をアクティブ化すると、/monitor エンドポイントが有効になります。

Webhook がアクティブ化されると、構成サーバーは、変更された可能性があると思われるアプリケーションを対象とした RefreshRemoteApplicationEvent を送信します。変更の検出は戦略化できます。ただし、デフォルトでは、アプリケーション名に一致するファイルの変更を検索します(たとえば、foo.properties は foo アプリケーションを対象とし、application.properties はすべてのアプリケーションを対象とします)。動作をオーバーライドする場合に使用する戦略は PropertyPathNotificationExtractor です。これは、リクエストヘッダーと本文をパラメーターとして受け入れ、変更されたファイルパスのリストを返します。

デフォルトの構成は、Github、Gitlab、Gitea、Gitee、Gogs、Bitbucket でそのまま使用できます。Github、Gitlab、Gitee、Bitbucket からの JSON 通知に加えて、path={application} のパターンでフォームにエンコードされた本文パラメーターを使用して /monitor に POST することにより、変更通知をトリガーできます。そうすることで、{application} パターン(ワイルドカードを含めることができる)に一致するアプリケーションにブロードキャストします。

RefreshRemoteApplicationEvent は、構成サーバーとクライアントアプリケーションの両方で spring-cloud-bus がアクティブ化されている場合にのみ送信されます。
デフォルト設定では、ローカル git リポジトリのファイルシステムの変更も検出されます。その場合、Webhook は使用されません。ただし、構成ファイルを編集するとすぐに、リフレッシュがブロードキャストされます。