您好,登錄后才能下訂單哦!
本篇內容主要講解“SpringBoot整合Nacos自動刷新配置的方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“SpringBoot整合Nacos自動刷新配置的方法”吧!
Nacos作為SpringBoot服務的注冊中心和配置中心。
在NacosServer中修改配置文件,在SpringBoot不重啟的情況下,獲取到修改的內容。
本例將在配置文件中配置一個 cml.age=100 的配置項,程序中編寫一個方法讀取配置文件,并通過 Get--->/test/age 接口提供給瀏覽器訪問。
若配置文件中的 age 修改為 200 ,不用重新啟動程序,直接訪問 /test/age 接口,將獲取到最新的值 200
若配置文件中沒有age 的配置項,或干脆沒有 cml 的配置項,訪問 /test/age 接口將返回默認的值 18
SpringCloud:2020.0.3
SpringCloudAlibaba:2021.1
SpringBoot:2.5.2
pom中引入 nacos 相關配置:discovery,config,bootstrap
網上有人說,需要引入 actuator ,其實不用。本例中還集成了 spring-cloud-starter-oauth3 ,根本沒有 SpringSecurity 攔截的問題
問題:NacosServer和NacosClient是如何通訊的?如果是http接口方式來回調用,為什么沒有被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: yaml
app-dev.yml
此配置指 NacosServer 中的配置文件 app-dev.yml ,僅截取 cml.age 部分
cml: age: 100
RefreshScope注解:必須加在 controller 上面,加在主啟動內上面不好使。哪些資源需要自動刷新配置就在該controller上面添加此注解,可封裝一個 BaseController 。
@Value("${cml.age:18}"):讀取配置文件中的 cml.age 配置項值,賦給變量 age ,默認值為 18
getAge:獲取年齡接口
/test/age接口需要添加到 Security.permitAll
問題:RefreshScope注解為什么一定要添加在 controller 上面?為什么在主啟動類上面添加不生效
@RefreshScope @Api(tags = "測試 - api") @Slf4j @RestController @RequestMapping("/test") public class TestController { /** * 獲取配置文件中的 cml.age 內容,若未獲取到,默認值為18 */ @Value("${cml.age:18}") private String age; @ApiOperation(value = "獲取年齡 - 測試配置自動刷新", notes = "獲取年齡 - 測試配置自動刷新") @GetMapping("/age") public String getAge() { return age; } }
開啟 nacos-refresh 日志,打印配置內容更新情況
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:
在不重啟SpringBoot服務的情況,多次在 NacosServer 中修改 cml.age 配置項的值,然后通過瀏覽器訪問 /test/age 接口,發現每次都可以獲取到最新的 age 值。
到此,相信大家對“SpringBoot整合Nacos自動刷新配置的方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。