Spring Cloud の動的設定更新:Config Data から RefreshScope まで
基準は Spring Boot 3.x、Spring Cloud 202x.x、Spring Cloud Alibaba、Nacos 2.x。バージョンは公式の互換性マトリクスに従って組み合わせる必要がある。
1. 起動時の読み込みと実行時の更新
最近の Spring Boot プロジェクトでは、Config Data Import を優先的に使う。
YAML
spring:
application:
name: order-service
config:
import: optional:nacos:order-service.yaml
Config Data はアプリケーションコンテキストの作成前に、初期状態の Environment を構築する。旧来の bootstrap.yml と同じではない。Bootstrap は旧プロジェクトや特定の初期化が必要な場面では引き続き使えるが、新しいプロジェクトの標準の入口にはしない。
2. RefreshScope の実際の仕組み
@RefreshScope は scoped proxy を使って対象オブジェクトをキャッシュする。リフレッシュ時には対象オブジェクトを破棄し、次の呼び出しで再生成する。任意の Bean のフィールドが瞬時に書き換わるわけではない。接続プール、スレッドプール、リモートクライアント、ローカルキャッシュを備えた Bean では、古いリソースを確実に閉じてから新しいリソースを作る必要がある。
3. Nacos 設定
YAML
spring:
cloud:
nacos:
server-addr: <NACOS_SERVER_ADDR>
username: <NACOS_USERNAME>
password: <NACOS_PASSWORD>
config:
file-extension: yaml
refresh-enabled: true
実際のプロパティパスは、現在の starter の設定メタデータを基準にする。アカウント、パスワード、本番用アドレスを Git にコミットしてはいけない。
4. 典型的な更新フロー
TEXT
Nacos 发现变更 -> 客户端发布刷新事件 -> Spring 更新 Environment
-> ConfigurationProperties 重新绑定 -> RefreshScope 清理目标缓存
-> 下次调用创建新对象
5. 本番運用での制約
依存関係とイメージのバージョンを固定する。Actuator のリフレッシュエンドポイントを保護する。設定変更に対して、監査、承認、段階展開、ロールバックの仕組みを整える。リフレッシュの失敗と Bean の再構築の失敗を監視する。