目录
1.前言2.版本信息3.引用相关pom文件4.配置文件添加nacos配置中心信息5.dataId的构成6.通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新7.在nacos配置中心增加配置数据8.启动工程并刷新nacos中更新配置数据,工程中自动获取到最新的配置数据9.附录
1.前言
在实际项目中经常要用到配置中心,常见的配置管理中心有Disconf、Apollo、Consul、Zookeeper、Spring Cloud Config 和Nacos,为了在项目中与这些配置管理中心交互,我们经常需要整合各类相关依赖包,解决各种版本冲突。 本文就如何快速整合spring cloud工程和nacos配置管理中心给出了详细的步骤,能够帮助小伙伴们快速整合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.引用相关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配置不会被正确加载
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 配置项说明
spring.cloud.nacos.config.namespace项目在nacos中的命名空间id,注意这里是命名空间id,不是命名空间名称
应用名,它是默认构成dataId的一部分
spring.cloud.nacos.config.username=nacos用户名
spring.cloud.nacos.config.password=nacos密码
spring.cloud.nacos.config.server-addr=127.0.0.1:8848nacos 配置中心服务地址
spring.cloud.nacos.config.file-extension=properties配置内容的数据格式,目前只支持 properties 和 yaml 类型。
5. dataId的构成
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。所以根据bootstrap.properties配置,此样例中对应的配置文件的dataId为client-demo.properties
6.通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新
@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配置中心增加配置数据
根据应用名和file-extension=properties确定配置dataId为client-demo.properties8.启动工程并刷新nacos中更新配置数据,工程中自动获取到最新的配置数据
8.1 启动本地工程
8.2 查看获取到的配置数据
8.3 更新配置中心数据
8.4 应用中对应的配置数据被动态刷新
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> ````