聊聊SpringBoot整合Nacos自動(dòng)刷新配置的問(wèn)題
目的
Nacos作為SpringBoot服務(wù)的注冊(cè)中心和配置中心。
在NacosServer中修改配置文件,在SpringBoot不重啟的情況下,獲取到修改的內(nèi)容。
本例將在配置文件中配置一個(gè) cml.age=100 的配置項(xiàng),程序中編寫一個(gè)方法讀取配置文件,并通過(guò) Get--->/test/age 接口提供給瀏覽器訪問(wèn)。
- 若配置文件中的 age 修改為 200 ,不用重新啟動(dòng)程序,直接訪問(wèn) /test/age 接口,將獲取到最新的值 200
- 若配置文件中沒(méi)有age 的配置項(xiàng),或干脆沒(méi)有 cml 的配置項(xiàng),訪問(wèn) /test/age 接口將返回默認(rèn)的值 18
環(huán)境
- SpringCloud:2020.0.3
- SpringCloudAlibaba:2021.1
- SpringBoot:2.5.2
pom
pom中引入 nacos 相關(guān)配置:discovery,config,bootstrap
網(wǎng)上有人說(shuō),需要引入 actuator ,其實(shí)不用。本例中還集成了 spring-cloud-starter-oauth2 ,根本沒(méi)有 SpringSecurity 攔截的問(wèn)題
問(wèn)題:NacosServer和NacosClient是如何通訊的?如果是http接口方式來(lái)回調(diào)用,為什么沒(méi)有被SpringSecurity攔截?是否是rpc?
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.dependencies}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.dependencies}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--nacos config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--bootstrap-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>配置文件
bootstrap.yml
server:
port: 9556
spring:
application:
name: app
profiles:
active: test
nacos:
discovery:
username: nacos
password: nacos
server-addr: 192.168.1.61:8848
config:
server-addr: 192.168.1.61:8848
file-extension: yamlapp-dev.yml
此配置指 NacosServer 中的配置文件 app-dev.yml ,僅截取 cml.age 部分
cml: age: 100
代碼
- RefreshScope注解:必須加在 controller 上面,加在主啟動(dòng)內(nèi)上面不好使。哪些資源需要自動(dòng)刷新配置就在該controller上面添加此注解,可封裝一個(gè) BaseController 。
- @Value("${cml.age:18}"):讀取配置文件中的 cml.age 配置項(xiàng)值,賦給變量 age ,默認(rèn)值為 18
- getAge:獲取年齡接口
- /test/age接口需要添加到 Security.permitAll
問(wèn)題:RefreshScope注解為什么一定要添加在 controller 上面?為什么在主啟動(dòng)類上面添加不生效
@RefreshScope
@Api(tags = "測(cè)試 - api")
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
/**
* 獲取配置文件中的 cml.age 內(nèi)容,若未獲取到,默認(rèn)值為18
*/
@Value("${cml.age:18}")
private String age;
@ApiOperation(value = "獲取年齡 - 測(cè)試配置自動(dòng)刷新", notes = "獲取年齡 - 測(cè)試配置自動(dòng)刷新")
@GetMapping("/age")
public String getAge() {
return age;
}
}日志
開(kāi)啟 nacos-refresh 日志,打印配置內(nèi)容更新情況
logging:
level:
com.alibaba.cloud.nacos.refresh: debug
打印的日志:
2022-01-28 13:43:30.574 [com.alibaba.nacos.client.Worker.longPolling.fixed-192.168.1.61_8848-zjrkm-admin] DEBUG com.alibaba.cloud.nacos.refresh.NacosContextRefresher.innerReceive:136 - Refresh Nacos config group=DEFAULT_GROUP,dataId=identityQrCodeAdmin-service-cml-test.yaml,configInfo=spring:
application:
name:
測(cè)試
在不重啟SpringBoot服務(wù)的情況,多次在 NacosServer 中修改 cml.age 配置項(xiàng)的值,然后通過(guò)瀏覽器訪問(wèn) /test/age 接口,發(fā)現(xiàn)每次都可以獲取到最新的 age 值。
到此這篇關(guān)于SpringBoot整合Nacos自動(dòng)刷新配置的文章就介紹到這了,更多相關(guān)SpringBoot整合Nacos配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)戰(zhàn)項(xiàng)目練習(xí)之球館在線預(yù)約系統(tǒng)的實(shí)現(xiàn)
理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SpringBoot+maven+freemark+Mysql實(shí)現(xiàn)一個(gè)球館在線預(yù)約系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2022-01-01
Java通過(guò)Modbus簡(jiǎn)單實(shí)現(xiàn)數(shù)采的示例代碼
本文介紹了Java通過(guò)Modbus簡(jiǎn)單實(shí)現(xiàn)數(shù)采,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
java使用FuncGPT慧函數(shù)對(duì)Mybatis進(jìn)行一對(duì)一查詢映射處理
這篇文章主要介紹了java使用FuncGPT慧函數(shù)對(duì)Mybatis進(jìn)行一對(duì)一查詢映射處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
關(guān)于scanner.nextInt()等next()和scanner.nextIine()連用注意事項(xiàng)
這篇文章主要介紹了關(guān)于scanner.nextInt()等next()和scanner.nextIine()連用注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-04-04
Java SpringBoot 使用攔截器作為權(quán)限控制的實(shí)現(xiàn)方法
這篇文章主要介紹了Java SpringBoot 使用攔截器作為權(quán)限控制的實(shí)現(xiàn),文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
淺談Java數(shù)值類型的轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換
這篇文章主要介紹了Java數(shù)值類型的轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Spring Boot優(yōu)化后啟動(dòng)速度快到飛起技巧示例
這篇文章主要為大家介紹了Spring Boot優(yōu)化后啟動(dòng)速度快到飛起的技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07

