Nacos入门实战(二)配置中心及配置实战
SpringCloud alibaba-Nacos配置中心及实战配置demo
- 配置中心基础使用
- 基础配置demo
- 1、配置文件
- 2、代码
- 3、创建配置
- 4、访问
- 更多配置测试
- 1、关于配置中心生效的粗细粒度图
- 2、案例一:不同的开发环境,可通过命名规则定义配置,从而加载相关信息;
- 1)、新建一个prod环境的配置
- 2)、对代码中appilication.yaml文件进行调整
- 3)、访问
- 3、不同组别,相同环境的配置
- 1)、新建俩配置,相同Data Id 不同group 。
- 2)、代码中yaml文件的调整
- 4、分组不同,相同环境不同Data Id
- 5、命名空间配置
- test 1、指定命名空间,分组名称和 prefix ;
- test 2、一个分组对应多个data Id
配置中心基础使用
配置中心的相关信息,是在bootstrap.yaml中配置的。项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot的配置文件加载优先级为bootstrap在先,application在后。bootstrap.yaml作用是让服务注册到nacos中以及到nacos中读取指定后缀为yaml的配置文件。
基础配置demo
1、配置文件
application.yaml文件的配置内容
spring:
profiles:
active: dev
bootstrap.yaml文件的配置内容
server:
port: 6688
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8010
config:
server-addr: localhost:8010
file-extension: yaml
2、代码
主启动类添加注解:
@EnableDiscoveryClient
新建controller,访问配置中心信息
@RefreshScope
@RestController
public class ClientConfigController {
@Value("${config.info}")
private String confInfo;
@GetMapping("/confInfo")
public String configInfo(){
return confInfo;
}
}
3、创建配置
路径:配置管理->配置列表
命名规则如下
4、访问
修改nacos配置信息为abc,刷新浏览器,会看到立即生效。
更多配置测试
1、关于配置中心生效的粗细粒度图
关于配置的相关信息,这么看,是不是直观一些呀 ; )
一个系统,包含多个应用,一个应用可以包含多个模块。每个模块都有对应不同的环境【比如开发环境,测试环境,预发环境,正式环境】;关于Group 可以是模块唯独,也可以是环境纬度;可以按实际情况按需配置。
如有不对或表述不清晰的地方,欢迎帮忙纠正和提建议。
2、案例一:不同的开发环境,可通过命名规则定义配置,从而加载相关信息;
1)、新建一个prod环境的配置
通过克隆现有配置即可,修改Data Id为prod环境
可以编辑配置信息为prod,用来区分;然后发布;
2)、对代码中appilication.yaml文件进行调整
环境改为prod;重启服务
3)、访问
访问接口,可以看到效果,以上是同一个分组,内含不同环境的配置
3、不同组别,相同环境的配置
比如场景:item 和 search模块,对应相同的prod环境配置文件;
1)、新建俩配置,相同Data Id 不同group 。
2)、代码中yaml文件的调整
代码中yaml文件调整,指定分组名称:group: SEARCH
server:
port: 6688
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8010
config:
server-addr: localhost:8010
file-extension: yaml
group: SEARCH
4、分组不同,相同环境不同Data Id
比如item模块,对应prod环境配置文件 nacos-config-client-search-prod.yaml
,代码中 yaml文件内容的调整
需要指定分组和prefix,做更细粒度的配置。
server:
port: 6688
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8010
config:
server-addr: localhost:8010
file-extension: yaml
group: SEARCH
prefix: nacos-config-client-search
配置中心创建配置如下图:
5、命名空间配置
场景:不同系统间,需要自己独有的配置。
可以通过命名空间区分不同系统间配置。
test 1、指定命名空间,分组名称和 prefix ;
代码中yaml文件内容调整为
server:
port: 7777
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yaml
group: ITEM
prefix: nacos-config-client-item
namespace: 1e132bb4-aab9-4853-8e92-347esssef13e
指定分组,prefix , namespace .
在配置中心,配置管理->配置列表,创建不同的命名空间,指定应用,分组和Data Id
test 2、一个分组对应多个data Id
场景比如:一个item模块,有多个独立的中间件配置
需要一个分组下多个Data Id这种更细粒度的场景,可以这样配置yaml文件:
通过增加extension-configs数组指定配置信息的Data Id和Group
server:
port: 6688
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8010
config:
server-addr: localhost:8010
file-extension: yaml
namespace: xxxxcef-f007-4073-9cff-dhsj628sncb0
extension-configs[0]:
data-id: item-redis-prod.yaml
group: ITEM
refresh: true
extension-configs[1]:
data-id: item-mybatis-prod.yaml
group: ITEM
refresh: true
对应代码接口demo
package com.nacosconf.nacosconfig7777.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Auther: gina
* @Date: 2025-03-12
* @Description:
*/
@RefreshScope
@RestController
public class ClientConfigController {
@Value("${config.info}")
private String confInfo;
@Value("${config.mybatisInfo}")
private String mybatisInfo;
@Value("${config.redisInfo}")
private String redisInfo;
@GetMapping("/mybatisInfo")
public String mybatisInfo() {
return mybatisInfo;
}
@GetMapping("/redisInfo")
public String redisInfo() {
return redisInfo;
}
@GetMapping("/configInfo")
public String configInfo() {
return confInfo;
}
}
直接访问接口,并且改动配置信息再次访问接口,访问到的是更新配置后的内容。
需要注意⚠️的点,就是在调整配置的时候,总会有问题🤨,希望大家能静下心来耐心调试,如果报错或者没生效,要检查好配置中心配置信息和代码中获取配置信息的路径是否一致;是否加了自动刷新注解,以及yaml中的分组,命名空间,prefix等是否正确。
还有一个比较重要的点‼️需要注意⚠️
- 若上线时有新增的配置信息,一定要到配置中心先配置好,再上代码,不然会报错的