Nacos作为配置中心
Nacos作为配置中心💥代码实现
1、引入依赖💨
<dependencies>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--web + actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
YML的类别
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
2、配置Bootstrap.yml💨
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
group: TEST_GROUP
namespace: ea7be215-37d0-4175-958c-a8af3545f115
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
# nacos-config-client-test.yaml ----> config.info
共享配置 & 多配置文件💨
spring:
application:
name: nacos-config-multi
main:
allow-bean-definition-overriding: true
cloud:
nacos:
username: ${nacos.username}
password: ${nacos.password}
config:
server-addr: ${nacos.server-addr}
namespace: ${nacos.namespace}
# 用于共享的配置文件
shared-configs:
- data-id: common-mysql.yaml
group: SPRING_CLOUD_EXAMPLE_GROUP
- data-id: common-redis.yaml
group: SPRING_CLOUD_EXAMPLE_GROUP
- data-id: common-base.yaml
group: SPRING_CLOUD_EXAMPLE_GROUP
# 常规配置文件
# 优先级大于 shared-configs,在 shared-configs 之后加载
extension-configs:
- data-id: nacos-config-advanced.yaml
group: SPRING_CLOUD_EXAMPLE_GROUP
refresh: true
- data-id: nacos-config-base.yaml
group: SPRING_CLOUD_EXAMPLE_GROUP
refresh: true
3、配置application.yml💨
spring:
profiles:
active: dev # 表示开发环境
#active: test # 表示测试环境
#active: info
4、Controller测试接口💨
/**
* 配置客户端控制器
*
* @author LiJunYi
* @date 2020/11/09
* RefreshScope 支持Nacos的动态刷新功能
*/
@RestController
@RefreshScope
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
在Nacos中添加配置信息(重点)❗
匹配规则-理论💢
- Nacos中的 Data Id 的组成格式及与SpringBoot配置文件中的匹配规则
- 官方文档
- 说明:之所以需要配置spring.application.name,是因为它是构成Nacos配置管理dataId字段的一部分。
# 在Nacos Spring Cloud 中,dataId的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
1、prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。
2、spring.profile.active即为当前环境对应的 profile。
注意:当spring.profile.active为空时,对应的连接符 – 也将不存在
datald的拼接格式变成${prefix}.${file-extension}
3、file-exetension 为配置内容的数据格式,
可以通过配置项spring.cloud .nacos.config.file-extension来配置。
目前只支持properties和yaml类型。
# 通过Spring Cloud 原生注解@RefreshScope实现配置自动更新:
# 最后公式:
$(spring.application.name}-$(spring.profiles.active}.$spring.cloud.nacos.config.file-extension}
配置新增💦
- 图解💨
分类配置💢
- Nacos的图形化管理界面-配置管理💨
- 命名空间💨
Namespace+Group+DatalD三者关系
是什么💨
类似Java里面的 package
名和类名, 最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
三者情况💨
# 默认情况:
Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
# Nacos默认的命名空间是public,Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,
不同的Namespace之间是隔离的。
# Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
# Sevice就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,
Cluster是对指定微服务的一个虚拟划分。
比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的
Service微服务起一个集群名称(Hz),给广州机房的Service微服务起一个集群名称(GZ),
还可以尽量让同一个机房的微服务互相调用,以提升性能。
# 最后是Instance,就是微服务的实例。
实例-三种方案加载配置❗
1、dataID方案
指定spring.profile.active
和配置文件的DatalD
来使不同环境下读取不同的配置
默认空间+默认分组+新建dev和test两个DatalD
通过spring.profile.active
属性就能进行多环境下配置文件的读取
- 新建两个不同的配置💨
- YML💨
2、Group方案
- Nacos配置详情💨
- YML💨
3、Namespace方案
- Nacos新增命名空间💨
- bootstrao.yml💨
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
group: TEST_GROUP
namespace: ea7be215-37d0-4175-958c-a8af3545f115