目錄
1.前言2.版本信息3.引用相關(guān)pom文件4.配置文件添加nacos配置中心信息5.dataId的構(gòu)成6.通過(guò) Spring Cloud 原生注解 @RefreshScope 實(shí)現(xiàn)配置自動(dòng)更新7.在nacos配置中心增加配置數(shù)據(jù)8.啟動(dòng)工程并刷新nacos中更新配置數(shù)據(jù),工程中自動(dòng)獲取到最新的配置數(shù)據(jù)9.附錄
1.前言
在實(shí)際項(xiàng)目中經(jīng)常要用到配置中心,常見(jiàn)的配置管理中心有Disconf、Apollo、Consul、Zookeeper、Spring Cloud Config 和Nacos,為了在項(xiàng)目中與這些配置管理中心交互,我們經(jīng)常需要整合各類相關(guān)依賴包,解決各種版本沖突。 本文就如何快速整合spring cloud工程和nacos配置管理中心給出了詳細(xì)的步驟,能夠幫助小伙伴們快速整合spring cloud工程和nacos 配置管理中心
2.版本信息
<properties> <java.version>17</java.version> <spring-boot.version>2.6.13</spring-boot.version> <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version> <spring-cloud.version>2021.0.5</spring-cloud.version> </properties>3.引用相關(guān)pom文件
Spring Cloud <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> SpringBoot <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> alibaba-nacos-config <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>4. 配置文件添加nacos配置中心信息
注意一定要配置在bootstrap.properties中,否則nacos配置不會(huì)被正確加載
4.1 修改bootstrap.properties
spring.application.name=client-demo spring.cloud.nacos.config.namespace=ns spring.cloud.nacos.config.username=nacos spring.cloud.nacos.config.password=nacos spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.file-extension=properties4.2 配置項(xiàng)說(shuō)明
spring.cloud.nacos.config.namespace項(xiàng)目在nacos中的命名空間id,注意這里是命名空間id,不是命名空間名稱
應(yīng)用名,它是默認(rèn)構(gòu)成dataId的一部分
spring.cloud.nacos.config.username=nacos用戶名
spring.cloud.nacos.config.password=nacos密碼
spring.cloud.nacos.config.server-addr=127.0.0.1:8848nacos 配置中心服務(wù)地址
spring.cloud.nacos.config.file-extension=properties配置內(nèi)容的數(shù)據(jù)格式,目前只支持 properties 和 yaml 類型。
5. dataId的構(gòu)成
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix 默認(rèn)為 spring.application.name 的值,也可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.prefix來(lái)配置。spring.profiles.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile,詳情可以參考 Spring Boot文檔。 注意:當(dāng) spring.profiles.active 為空時(shí),對(duì)應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成 ${prefix}.${file-extension}file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.file-extension 來(lái)配置。目前只支持 properties 和 yaml 類型。所以根據(jù)bootstrap.properties配置,此樣例中對(duì)應(yīng)的配置文件的dataId為client-demo.properties
6.通過(guò) Spring Cloud 原生注解 @RefreshScope 實(shí)現(xiàn)配置自動(dòng)更新
@RestController @RequestMapping("/config") @RefreshScope public class ConfigController { @Value("${useLocalCache:false}") private boolean useLocalCache; @RequestMapping("/get") public boolean get(boolean fuse) { if(fuse){ try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } return useLocalCache; } }7.在nacos配置中心增加配置數(shù)據(jù)
根據(jù)應(yīng)用名和file-extension=properties確定配置dataId為client-demo.properties8.啟動(dòng)工程并刷新nacos中更新配置數(shù)據(jù),工程中自動(dòng)獲取到最新的配置數(shù)據(jù)
8.1 啟動(dòng)本地工程
8.2 查看獲取到的配置數(shù)據(jù)
8.3 更新配置中心數(shù)據(jù)
8.4 應(yīng)用中對(duì)應(yīng)的配置數(shù)據(jù)被動(dòng)態(tài)刷新
9.附錄
完整pom信息如下
```` <properties> <java.version>17</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.6.13</spring-boot.version> <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version> <spring-cloud.version>2021.0.5</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ````