24小時自助下單網(wǎng)站搜索引擎付費推廣
Nacos配置管理
統(tǒng)一配置管理:一次配置更改并支持熱更新。將核心配置存儲到配置管理服務,當微服務啟動時會自動讀取配置管理服務中的配置信息并結合本地配置啟動。當配置改動時,配置管理服務會自動通知微服務,微服務讀取新配置并自動熱更新,無需重新啟動。
配置中心的思路是:
1、首先把項目中各種配置全部都放到一個集中的地方進行統(tǒng)一管理,并提供一套標準的接口。2、當各個服務需要獲取配置的時候,就來配置中心的接口拉取自己的配置。
3、當配置中心中的各種參數(shù)有更新的時候,也能通知到各個服務實時的過來同步最新的信息,使之動態(tài)更新。
Hello配置管理
使用nacos作為配置中心,其實就是將nacos當做一個服務端,將各個微服務看成是客戶端,將各個微服務的配置文件統(tǒng)一存放在nacos上,然后各個微服務從nacos上拉取配置即可。
對應的依賴為spring-cloud-starter-alibaba-nacos-config注意:啟用配置中心后,需要配置文件寫到bootstrap配置文件中。只能是bootstrap.yml或bootstrap.properties優(yōu)先級等級為bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
需要注意:SpringCloud默認將bootstrap移除了,需要手動添加bootstrap依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.1.5</version></dependency
消費者配置
spring.cloud.nacos.config.server-addr=localhost:8848 服務配置中心的配置spring.cloud.nacos.config.file-extension=yaml 配置使用的后綴名spring.cloud.nacos.config.prefix=nacos-consumer 配置DataId名稱,默認就是服務名稱spring.cloud.nacos.config.group=DEFAULT_GROUP 默認分組名稱spring.profiles.active=dev 讀取指定配置文件,配置參數(shù)dev開發(fā)環(huán)境、prod生產(chǎn)環(huán)境、test測試環(huán)境
配置設置的概念:
- 命名空間Namespace:不同的項目可以分為不同的命名空間。
- 配置分組Group:根據(jù)項目的不同環(huán)境可以一個分組。
- 配置集Data ID:服務不同環(huán)境的不同配置,就是一個配置集
使用nacos配置管理
DataID就是配置文件名稱,不能沖突,采用【微服務名稱-profile.yaml或properties】,如user-service-dev.yaml。默認DataId為spring.cloud.nacos.config.prefix,后面可以添加spring.profiles.active值,對應的文件后綴為spring.cloud.nacos.config.file-extension
分組采用默認即可。配置內容應該只有可能有熱更新需求的配置信息,不是將所application.yml中內容全部拷貝。例如數(shù)據(jù)庫地址一般不會頻繁更新的,所以添加到配置管理中就不合適。這里適合一些開關類型或者模板類型的配置,pattern.dateformat=yyyy-MM-dd
微服務配置拉取
項目啟動先讀取nacos中的配置文件,然后讀取本地配置文件application.yaml,合并后再創(chuàng)建spring容器,加載受管bean。項目中提供bootstrap.yml優(yōu)先application.yml,這里配置nacos地址,從而實現(xiàn)nacos中配置信息的讀取在控制器中讀取配置信息進行驗證
@Value("${pattern.dateformat}")
private String dateFormat;
@GetMapping("now")public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateFormat));}
配置熱更新
可以在nacos控制臺上手動編輯更新配置信息。事實上nacos中的配置文件變更后,微服務無需重啟就可以感知。需要通過2種配置方式實現(xiàn)
方式1:在@Value注入的變量所在類上添加注解@RefreshScope
@Slf4j @RestController @RequestMapping("/user")@RefreshScopepublic class UserController { @Value("pattern.dateformat") private String dateFormat;}
在微服務日志中可以看到服務更新的自動通知
方式2:使用@ConfigurationProperties注解
@Component @Data@ConfigurationProperties(prefix="pattern")public class PatternProperties { private String dataformat;}
修改控制器類通過PatternProperties組件獲取配置信息
@Autowiredprivate PatternProperties properties;@GetMapping("now")public String now() { return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()); }
推薦配置更新時優(yōu)先考慮使用@ConfigurationProperties,而不是@Value+@RefreshScope
多環(huán)境配置共享
某個配置在開發(fā)、測試、生產(chǎn)等不同環(huán)境下的數(shù)據(jù)值一致,每個配置文件中都寫一次是不合理的,而且修改時必須在每個配置文件中進行修改就更加的不合理了。微服務啟動時會從nacos讀取多個配置文件
- 【spring.application.name】-【spring.profiles.active】.yaml,例如userservice-dev.yaml
- 【spring.application.name】.yaml,例如userservice.yaml
- 【spring.application.name】,沒有后綴,例如userservice無論profile如何變化,[spring.application.name].yaml文件一定會被加載,因此多環(huán)境共享配置可以寫入這個配置文件中。多配置優(yōu)先級:服務名-profile.yaml > 服務名.yaml > 本地配置