第六节:Nacos配置管理

1、Nacos配置管理

统一配置管理:

我们服务中配置如果都放在代码中或者项目里的配置文件中,那么我们如果要修改配置,就不得不修改代码,提交上线,重启服务。

如果我们使用统一配置管理,就可以在服务启动的时候从配置管理服务读取配置,启动后,修改配置后,也会主动通知我们的服务。

第六节:Nacos配置管理_第1张图片

1.1、新建配置

点击新建配置

截屏2022-04-04 下午3.19.29

DataId是唯一的,所以,命名需要注意,这里使用服务名+环境标识。

group默认,配置格式选择yaml,内容填写需要热更新的配置。

添加配置内容

第六节:Nacos配置管理_第2张图片

点击页面最后的发布

点击页面最后的发布

第六节:Nacos配置管理_第3张图片

2、服务获取配置

服务启动的时候,获取读取nacos配置文件,然后读取本地配置文件,然后将配置合并,然后创建Spring容器,加载bean。

第六节:Nacos配置管理_第4张图片

我们要在读取本地配置文件前,获取nacos服务地址,bootstrap.yml文件读取的优先级高与application.yml文件,所以,nacos相关的配置需要放在bootstrap.yml文件中。

2.1、引入依赖


        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        dependency>

2.2、添加bootstrap.yml文件

添加后,在application.yml文件中去除重复的配置。

spring:
    application:
        name: userservice
    profiles:
        active: dev
    cloud:
      nacos:
          server-addr: 192.168.0.105:8848
          config:
              file-extension: yaml #文件后缀名

3.3、使用配置

比如我们定义的是:

uservice:
  open: 1

通过@Value进行使用

    @Value("${userservice.open}")
    private String open;

    @GetMapping("open")
    public String open(){
        return open;
    }

启动访问open接口,可以拿到配置值1。但这个时候还不支持热更新。

3.4、总结

1、在Nacos中添加配置文件

2、在微服务中引入nacos的config依赖

3、在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件

3、配置热更新

Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:

3.1、@RefreshScope

在@Value注入的变量所在类上添加注解@RefreshScope

修改配置后,会有以下日志:

04-04 15:49:28:229  INFO 63084 --- [ternal.notifier] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [userservice.open]
04-04 15:49:28:229  INFO 63084 --- [ternal.notifier] c.a.nacos.client.config.impl.CacheData   : [config_rpc_client] [notify-ok] dataId=userservice-dev.yaml, group=DEFAULT_GROUP, md5=01bc6b07f4e6ae29eaed0b9d54ed635e, listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@2ef74e78 ,cost=227 millis.

3.2、@ConfigurationProperties

使用@ConfigurationProperties注解,前缀和变量名拼接后的名字,从配置中匹配。

@Data
@ConfigurationProperties(prefix = "userservice")
@Component
public class PatternProperties {
    private String open;
}

4、多环境配置共享

如果我们多个环境,开发、测试、生产,所有环境都需要某些相同的配置,我们就需要一个多环境配置共享。

微服务启动时会从nacos读取多个配置文件:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml

无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件

4.1、nacos新增配置

第六节:Nacos配置管理_第5张图片

userservice.yaml所有环境都能访问到,xx-dev只有对应环境才能访问到。

4.2、多种配置的优先级

服务名-profile.yaml > 服务名.yaml > 本地配置

总结:

微服务会从nacos读取的配置文件:

[服务名]-[spring.profile.active].yaml,环境配置

[服务名].yaml,默认配置,多环境共享

优先级:

[服务名]-[环境].yaml >[服务名].yaml > 本地配置

5、多服务共享配置

5.1、nacos配置后台新增配置common.yaml

5.2、代码配置修改

使用shared-configs或者extends-configs,来访问其他的配置

spring:
    application:
        name: userservice
    profiles:
        active: dev
    cloud:
      nacos:
          server-addr: 192.168.0.105:8848
          config:
              file-extension: yaml #文件后缀名
              shared-configs: common.yaml #可以访问的配置文件
              #extends-configs: common.yaml

5.3、优先级

服务名-profile.yaml >服务名称.yaml > extension-config > shared-config > 本地配置

你可能感兴趣的:(微服务学习笔记,java,Nacos)