Einheitliches Konfigurationsmanagement
Funktion: Einheitliche Verwaltung von Konfigurationsdateien für Microservices mit denselben Konfigurationsdateien.
Eine einheitliche Konfigurationsverwaltung ist eine Lösung für das Szenario: Wenn unter normalen Umständen mehrere Microservice-Instanzen mit derselben Funktion vorhanden sind und die Konfiguration geändert wird, müssen diese einzeln geändert und dann neu gestartet werden.
Die Kernkonfiguration wird im Konfigurationsverwaltungsdienst abgelegt . Beim Start liest der Mikrodienst die Kernkonfiguration im Konfigurationsverwaltungsdienst und kombiniert sie zum Starten mit seiner eigenen Konfiguration.
Nach den Konfigurationsänderungen im Konfigurationsverwaltungsdienst werden die erforderlichen Mikrodienste automatisch benachrichtigt und das Hot-Update wird automatisch abgeschlossen, nachdem die Mikrodienste es gelesen haben .
In Konfigurationsverwaltung -> Konfigurationsliste hinzufügen:
Code-Konfigurationsprozess
Projektstart -> Bootstrap.yml -> Nacos-Konfigurationsdatei lesen -> Lokale Anwendung.yml lesen -> Federcontainer erstellen -> Beans laden.
1. Führen Sie Maven-Abhängigkeiten ein
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2. Erstellen Sie bootstrap.yml
Dienstname + Entwicklungsumgebung + Dateisuffixname bilden die Daten-ID, das heißt: ${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 #文件后缀名
Beim Benutzen:
@Value("${pattern.dateformat}")
private String dateFormat;
Hot-Update konfigurieren
Das Update wird in etwa fünf Sekunden wirksam.
Methode 1: Verwenden Sie @RefreshScope
Hot-Updates können durch die Verwendung der @RefreshScope-Annotation für Klassen erreicht werden, die @Value verwenden.
@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));
}
}
Methode 2: Verwenden Sie @ConfigurationProperties (empfohlen)
<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()));
}
}
Konfigurationsfreigabe für mehrere Umgebungen
Einige Werte bleiben während der Entwicklung, des Testens und der Produktion unverändert, sodass sie für die gemeinsame Nutzung von Konfigurationen in mehreren Umgebungen geeignet sind.
Mehrere Konfigurationsprioritäten: Dienstname-Profil.yaml > Dienstname.yaml > lokale Konfiguration .