統合構成管理
機能:同じ設定ファイルを持つマイクロサービスの設定ファイルを一元管理。
統合構成管理は、このシナリオに対する解決策です。通常の状況では、同じ機能を持つ複数のマイクロサービス インスタンスがあり、構成が変更された場合、それらを 1 つずつ変更してから再起動する必要があります。
コア構成は構成管理サービスに配置されており、マイクロサービスは起動時に構成管理サービス内のコア構成を読み込み、自身の構成と組み合わせて起動します。
構成管理サービスで構成が変更されると、必要なマイクロサービスに自動的に通知され、マイクロサービスがそれを読み取った後、ホット アップデートが自動的に完了します。
「構成管理」->「構成リスト」に追加します。
コード構成プロセス
プロジェクトの起動→bootstrap.yml→nacos設定ファイルの読み込み→ローカルのapplication.ymlの読み込み→Springコンテナの作成→Beanのロード。
1. Maven 依存関係を導入する
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2. bootstrap.ymlを作成する
データ ID から構成されるサービス名 + 開発環境 + ファイルサフィックス名、つまり ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
spring:
application:
name: userservice #eureka的服务名称
profiles:
active: dev #开发环境
cloud:
nacos:
server-addr: localhost:8848 # nocos服务器地址
config:
file-extension: yaml #文件后缀名
使用する場合:
@Value("${pattern.dateformat}")
private String dateFormat;
ホットアップデートを構成する
アップデートは約 5 秒以内に有効になります。
方法 1: @RefreshScope を使用する
ホット アップデートは、@Value を使用するクラスで @RefreshScope アノテーションを使用することで実現できます。
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
@Value("${pattern.dateformat}")
private String dateFormat;
@GetMapping("date")
public String now() {
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateFormat));
}
}
方法 2: @ConfigurationProperties を使用する (推奨)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
@Autowired
private PatternProperties properties;
@GetMapping("date")
public String now() {
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
}
}
複数環境の構成共有
一部の値は開発、テスト、運用中に変更されないため、複数環境の構成共有に適しています。
複数の構成の優先順位:サービス名-プロファイル.yaml > サービス名.yaml > ローカル構成。