SpringCloud微服务-Nacos配置管理

Nacos配置管理

1、统一配置管理

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。(将微服务的配置交给Nacos进行管理

步骤:

image-20240228102221842

image-20240228102330211

注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

配置获取的步骤如下:

image-20240228102922670

具体步骤

  1. 引入nacos-config依赖

首先,在user-service服务中,引入nacos-config的客户端依赖:

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 添加bootstrap.yaml

然后,在user-service中添加一个bootstrap.yaml文件,内容如下:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。

测试:

将上面配置弄好之后,测试Nacos中的配置是否生效

编写接口如下:

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Value("${pattern.dataformat}") //测试是否可以读取Nacos设置的配置文件的配置信息
    private String dataformat;

    @GetMapping("now")
    public  String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dataformat));
    }
}

重启服务,测试结果:image-20240228105226968

说明Nacos中的配置生效了。

2、配置自动刷新(热更新)

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

  • 方式一:在@Value注入的变量所在类上添加注解@RefreshScope

    @Slf4j
    @RestController
    @RequestMapping("/user")
    @RefreshScope //实现Nacos配置热更新的方式之一
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @Value("${pattern.dataformat}") //测试是否可以读取Nacos设置的配置文件的配置信息
        private String dataformat;
    
        @GetMapping("now")
        public  String now(){
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dataformat));
        }
    }
    

修改配置如下,经测试发现不用重启服务即可更新配置。

image-20240228105740298

  • 方式二:使用@ConfigurationProperties注解

    1. 新建一个配置类:

      @Data
      @Component
      @ConfigurationProperties(prefix = "pattern")
      public class ParttenPropertis {
          private String dataformat; //上面注解上的前缀与dataformat进行匹配,就可以实现配置的自动更新
      }
      
    2. 修改接口类中的代码

      @Slf4j
      @RestController
      @RequestMapping("/user")
      //@RefreshScope //实现Nacos配置热更新的方式之一
      public class UserController {
      
          @Autowired
          private UserService userService;
      
      //    @Value("${pattern.dataformat}") //测试是否可以读取Nacos设置的配置文件的配置信息
      //    private String dataformat;
      
          @Autowired
          private ParttenPropertis propertis; //注入ParttenPropertis这个配置类
          
          @GetMapping("now")
          public  String now(){
              return LocalDateTime.now().format(DateTimeFormatter.ofPattern(propertis.getDataformat()));
          }
      }
      

3、多环境配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

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

  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

3.1、添加一个环境共享配置

我们在nacos中添加一个userservice.yaml文件:

image-20240228112220284

image-20240228112524701

3.2、在user-service中读取共享配置

在user-service服务中,修改PatternProperties类,读取新添加的属性:

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class ParttenPropertis {
    private String dataformat; //上面注解上的前缀与dataformat进行匹配,就可以实现配置的自动更新
    private String envShardValue;

}

3.3、编写接口测试

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private ParttenPropertis propertis;

    @GetMapping("prop")
    public  ParttenPropertis propertis(){
        return propertis;
    }
}

3.4、运行两个User Application ,使用不同的profile(多环境)

image-20240228113837582

3.5、测试结果

访问地址进行查看,就可以发现配置已经加载进来了

image-20240228113534114

可以看出来,不管是dev,还是test环境,都读取到了envSharedValue这个属性的值。

注:多种配置的优先级

当Nacos配置文件的配置项和本地配置项相同的时候,就以Nacos上面的配置文件为主。

多种配置的优先级:

image-20240228144137701

4、Nacos集群的搭建

Nacos生产环境下一定要部署为集群状态,部署方式参考文档:nacos集群搭建文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼诺尔雷迪亚兹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值