目录
一、前言
二、Nacos配置中心使用
1、pom依赖
2、springcloud版本信息
3、配置nacos链接信息
4、在nacos中创建配置文件
5、测试代码
三、Nacos的配置属性
1、Data ID
2、命名空间
3、分组
4、动态刷新
四、多文件配置
文章来源地址https://uudwc.com/A/vn8N
一、前言
nacos作为配置中心,经常用到的两个大的功能便是动态刷新和多文件配置,本文也是根据这两点图文讲解。
二、Nacos配置中心使用
1、pom依赖
<!--注册中心客户端 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<!--移除默认版本,默认为2.x版本-->
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--nacos的配置中心的依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<exclusions>
<!--移除默认版本,默认为2.x版本-->
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.4.3</version>
</dependency>
2、springcloud版本信息
<!--依赖库管理-->
<dependencyManagement>
<dependencies>
<!-- 声明springBoot版本 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud alibaba 依赖 -->
<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>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
3、配置nacos链接信息
nacos的相关配置建议在bootstrap.properties中,原因参考:
《深入理解为什么nacos配置信息要放到bootstrap.properties「源码分析/图文详解」》
配置信息,这里使用的nacos集群:
#nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=10.211.55.9:8848,10.211.55.10:8848,10.211.55.11:8848
#nacos配置中心地址
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
#配置文件类型
#spring.cloud.nacos.config.file-extension=properties
#Data ID
spring.cloud.nacos.config.prefix=config-zhufeng-demo.properties
最后一项的Data ID一定要带着文件后缀
4、在nacos中创建配置文件
登录nacos控制台,左侧菜单-配置管理-配置列表,点击右侧 “+” ,开始创建:
创建的配置文件要带着文件后缀,如:config-zhufeng-demo.properties
在配置内容新增测试数据:
com.zhufeng.name=月夜烛峰
点击发布
配置列表中显示了刚才创建的一个配置文件,默认是在public下。
5、测试代码
/**
* @ClassName: UserController
* @Description UserController演示
* @author 月夜烛峰
* @date 2022/7/21 14:01
*/
@Slf4j
@RestController
@RequestMapping("user")
public class UserController {
@Value("${com.zhufeng.name}")
private String name;
@RequestMapping("info")
public String userInfo(){
return "获取nacos中配置:"+name;
}
}
配置一个简单的controller,启动项目测试
访问UserController可以正常获取在nacos中配置的属性 ,也即是一个简单的配置中心已经可以用了。
三、Nacos的配置属性
nacos作为配置中心时,有几个重要的属性Data ID、命名空间、分组
1、Data ID
Data ID简单来讲就是一个配置文件的唯一标识,上面我们创建了一个简单的配置文件,命名也比较简单,其实Data ID完整的明明规范如下:
${spring.cloud.nacos.config.prefix}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
spring.cloud.nacos.config.prefix:配置文件前缀,我们可以通过以下方式进行配置,如果不做配置,默认为服务名称,也就是 spring.application.name:
spring.cloud.nacos.config.prefix=com.config.zhufeng
spring.profiles.active:指定当前环境,比如:dev、test、prod,如果不做配置,配置文件格式如下,连接符号“-”也会自动去掉:
${spring.cloud.nacos.config.prefix}.${spring.cloud.nacos.config.file-extension}
spring.cloud.nacos.config.file-extension:文件后缀,对应文件格式,目前支持:TEXT、JSON、XML、YAML、HTML、Properties。
为了方便理解,在创建一个新的配置文件:zhufeng-web-user.properties
修改bootstrap.properties中nacos的配置信息:
#配置文件类型
spring.cloud.nacos.config.file-extension=properties
#Data ID
#spring.cloud.nacos.config.prefix=config-zhufeng-demo.properties
这时只保留了文件扩展名 spring.cloud.nacos.config.file-extension
当前服务信息如下:
服务端口
server.port=8081
#服务名称
spring.application.name=zhufeng-web-user
重新启动微服务
再次访问UserController时,name变成了 zhufeng-web-user
也就是根据服务名称去匹配nacos中的配置文件,格式:服务名称+文件后缀
2、命名空间
命名空间可以用来进行相同配置文件的不同环境隔离,比如区分开发、测试、生产环境等。
左侧菜单点击命名空间,创建一个开发用的命名空间:dev
创建成功后,在配置列表的tab页签中可以看到我们创建的dev。
在dev命名空间下,也创建一个名为config-zhufeng-demo.properties的配置文件,只是将配置内容修改如下,其余配置项相同。
com.zhufeng.name=开发环境
复制dev对应的命名空间的id,在配置文件中指定,修改如下:
#配置文件类型
#spring.cloud.nacos.config.file-extension=properties
#Data ID
spring.cloud.nacos.config.prefix=config-zhufeng-demo.properties
#指定命名空间
spring.cloud.nacos.config.namespace=2e8235ef-7eea-471c-a59b-ad2d15a6279d
指定文件名称,指定命名空间,重新访问UserController
配置项已经改为:开发环境,说明命名空间已经生效
3、分组
分组主要是用来做业务隔离,比如角色划分、机构划分、学校划分等,默认的分组是 DEFAULT_GROUP
创建一个user分组,修改配置内容为 user用户
列表中有两个分组,但Data Id命名相同,通过不同分组来区分
#Data ID
spring.cloud.nacos.config.prefix=config-zhufeng-demo.properties
#指定命名空间
spring.cloud.nacos.config.namespace=2e8235ef-7eea-471c-a59b-ad2d15a6279d
#指定分组
spring.cloud.nacos.config.group=user
访问UserController
配置信息变为:user用户,已经生效
4、动态刷新
配置文件的动态刷新作为nacos配置中心的核心功能,需要在代码中添加 @RefreshScope
/**
* @ClassName: UserController
* @Description UserController演示
* @author 月夜烛峰
* @date 2022/7/21 14:01
*/
//动态刷新配置
@RefreshScope
@Slf4j
@RestController
@RequestMapping("user")
public class UserController {
@Value("${com.zhufeng.name}")
private String name;
@RequestMapping("info")
public String userInfo(){
return "获取nacos中配置:"+name;
}
}
在配置文件中新增动态刷新配置项:
#Data ID
spring.cloud.nacos.config.prefix=config-zhufeng-demo.properties
#指定命名空间
spring.cloud.nacos.config.namespace=2e8235ef-7eea-471c-a59b-ad2d15a6279d
#指定分组
spring.cloud.nacos.config.group=user
#动态刷新
spring.cloud.nacos.config.refresh-enabled=true
默认情况refresh-enabled为false。
这时候修改nacos配置中心里配置文件对应的内容,应用内会自动或许新的配置内容。
四、多文件配置
当环境中引入的中间件较多时,我们可以配置多个文件,方便管理维护,比如数据库、缓存、消息等。
创建config-zhufeng-db.properties
依次创建config-zhufeng-redis.properties、config-zhufeng-kafka.properties,内容:
com.tag.redis=缓存配置信息
com.tag.kafka=消息配置信息
配置信息如下,开启自动刷新
#数据库
spring.cloud.nacos.config.shared-configs[0].data-id=config-zhufeng-db.properties
spring.cloud.nacos.config.shared-configs[0].group=dev
spring.cloud.nacos.config.shared-configs[0].refresh=true
#redis
spring.cloud.nacos.config.shared-configs[1].data-id=config-zhufeng-redis.properties
spring.cloud.nacos.config.shared-configs[1].group=dev
spring.cloud.nacos.config.shared-configs[1].refresh=true
#kafka
spring.cloud.nacos.config.shared-configs[2].data-id=config-zhufeng-kafka.properties
spring.cloud.nacos.config.shared-configs[2].group=dev
spring.cloud.nacos.config.shared-configs[2].refresh=true
UserController代码修改:
@RefreshScope
@Slf4j
@RestController
@RequestMapping("user")
public class UserController {
@Value("${com.zhufeng.name}")
private String name;
@Value("${com.tag.db}")
private String dbTag;
@Value("${com.tag.redis}")
private String redisTag;
@Value("${com.tag.kafka}")
private String kafkaTag;
@RequestMapping("info")
public String userInfo(){
return "dbTag:"+dbTag+",<br>redisTag:"+redisTag+",<br>kafkaTag:"+kafkaTag;
}
}
浏览器访问,输出正常:
文章来源:https://uudwc.com/A/vn8N