SpringCloud Nacos配置中心管理超詳細(xì)講解
一、Nacos配置管理
Nacos除了可以做注冊中心,同樣可以做配置管理來用
1.1 統(tǒng)一配置管理
當(dāng)微服務(wù)部署越來越多,達(dá)到數(shù)十,數(shù)百時,逐個修改微服務(wù)配置就會很麻煩,且容易出錯。我們需要一種統(tǒng)一配置管理方案,可以集中管理所有實例的配置。
Nacos一方面更可以將配置集中管理另一方面在配置變更時,及時通知微服務(wù),實現(xiàn)配置的熱更新。
1.1.1在nacos中添加配置文件
如何在nacos中添加配置文件
然后在彈出的表單中,填寫配置信息:
注意:項目的核心配置,需要熱更新的配置才有放到nacos管理的必要?;静粫兏囊恍┡渲眠€是保存在微服務(wù)本地比較好。
1.1.2 從微服務(wù)拉取配置
微服務(wù)要拉取nacos中管理的配置,并且與本地的application.yml配合合并才能完成項目的啟動。
但是如果尚未讀取application.yml,又如何得知nacos地址呢?
因此spring引入了一種新的配置文件:bootstrap.yaml文件,會在application.yml之前被讀取,流程如下:
引入nacos-config依賴
首先,在user-serivice服務(wù)中,引入nacos-config的客戶端依賴:
<!--nacos配置管理依賴--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
2)添加bootstrap.yaml
然后,在user-service中添加一個bootstrap.yaml文件,內(nèi)容如下:
spring:
application:
name: userservice # 服務(wù)名稱
profiles:
active: dev #開發(fā)環(huán)境,這里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后綴名
這里會根據(jù)spring.cloud.nacos.server-addr獲取nacos地址,再根據(jù)
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
作為文件id,來讀取配置。
本例中,就是去讀取userservice-dev.yaml
:
3)讀取nacos配置
在user-service中的UserController中添加業(yè)務(wù)邏輯,讀取pattern.dateformat配置:
完整代碼:
import cn.itcast.user.pojo.User; import cn.itcast.user.service.UserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Value("${pattern.dateformat}") private String dateformat; @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); } }
在頁面訪問,可以看到效果:
1.2 配置熱更新
我們最終的目的,是修改nacos中的配置后,微服務(wù)中無需重啟即可讓配置生效,也就是配置熱更新。
要實現(xiàn)配置熱更新,可以使用兩種方式:
1.2.1 方式一
在@Value注入的變量所在類上添加注解@RefreshScope:
1.2.2 方式二
使用@ConfigurationProperties注解代替@Value注解。
在user-service服務(wù)中,添加一個類,讀取patterrn.dateformat屬性:
package cn.itcast.user.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @Data @ConfigurationProperties(prefix = "pattern") public class PatternProperties { private String dateformat; }
在UserController中使用這個類代替@Value:
完整代碼:
import cn.itcast.user.config.PatternProperties; import cn.itcast.user.pojo.User; import cn.itcast.user.service.UserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Autowired private PatternProperties patternProperties; @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat())); } }
1.3 配置共享
其實微服務(wù)啟動時,會去nacos讀取多個配置文件,例如:
[spring.application.name]-[spring.profiles.active].yaml
,例如:userservice-dev.yaml[spring.application.name].yaml
,例如:userservice.yaml
而[spring.application.name].yaml
不包含環(huán)境,因此可以被多個環(huán)境共享。
下面我們通過案例來測試配置共享
1)添加一個環(huán)境共享配置
我們在nacos中添加一個userservice.yaml文件:
2)在user-service中讀取共享配置
在user-service服務(wù)中,修改PatternProperties類,讀取新添加的屬性:
在user-service服務(wù)中,修改UserController,添加一個方法:
3)運(yùn)行兩個UserApplication,使用不同的profile
這樣,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。
啟動UserApplication和UserApplication2
訪問http://localhost:8081/user/prop,結(jié)果:
訪問http://localhost:8082/user/prop,結(jié)果:
可以看出來,不管是dev,還是test環(huán)境,都讀取到了envSharedValue這個屬性的值。
4)配置共享的優(yōu)先級
當(dāng)nacos、服務(wù)本地同時出現(xiàn)相同屬性時,優(yōu)先級有高低之分:
到此這篇關(guān)于SpringCloud Nacos配置中心管理超詳細(xì)講解的文章就介紹到這了,更多相關(guān)SpringCloud Nacos配置中心內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
執(zhí)行java請求時導(dǎo)致在腳本執(zhí)行結(jié)束時JVM無法退出
這篇文章主要介紹了執(zhí)行java請求,導(dǎo)致在腳本執(zhí)行結(jié)束時JVM無法退出問題,本文通過原因分析給出解決方案,需要的朋友可以參考下2020-02-02Apache?SkyWalking?監(jiān)控?MySQL?Server?實戰(zhàn)解析
這篇文章主要介紹了Apache?SkyWalking?監(jiān)控?MySQL?Server?實戰(zhàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09spring設(shè)置定時任務(wù)方式(@Scheduled)
這篇文章主要介紹了spring設(shè)置定時任務(wù)方式(@Scheduled),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04