首页 > 其他分享 >Nacos配置管理

Nacos配置管理

时间:2022-12-04 23:13:24浏览次数:42  
标签:读取 application spring 配置 配置管理 Nacos nacos yaml

Nacos除了可以做注册中心,同样可以做配置管理来使用。

1.统一配置管理

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

Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

1.1.在nacos中添加配置文件

如何在nacos中管理配置呢?

然后在弹出的表单中,填写配置信息:

 

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

1.2.从微服务拉取配置

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。

但如果尚未读取application.yml,又如何得知nacos地址呢?

因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:

 

1)引入nacos-config依赖

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

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

2)添加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,来读取配置。

本例中,就是去读取userservice-dev.yaml

 

3)读取nacos配置

在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置:

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

    @Autowired
    private UserService userService;

    @Value("${pattern.dateformat}")
    private String dateformat;
    
    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
    // ...略
}

在页面访问,可以看到效果。

2.配置热更新

我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新

要实现配置热更新,可以使用两种方式:

2.1.方式一

在@Value注入的变量所在类上添加注解@RefreshScope:(哪里调用,哪里增加这个注解)

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

    @Autowired
    private UserService userService;

     @Value("${pattern.dateformat}")
     private String dateformat;

2.2.方式二

使用@ConfigurationProperties注解代替@Value注解。

在user-service服务中,添加一个类,读取patterrn.dateformat属性:(原理是将内容改为properties的配置类,我们使用时,调用该配置类的方法。 配置类在启动后应于与yaml等配置内容合并在一起,所以产生了关联)

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

在UserController中使用这个类代替@Value:

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

    @Autowired
    private UserService userService;

    @Autowired
    private PatternProperties patternProperties;

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

    // 略
}

3.配置共享

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

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

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

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

4)配置共享的优先级

当nacos、服务本地同时出现相同属性时,优先级有高低之分:

 

当 properties 的文件与yaml文件有冲突时,以哪个为准?

application.properties优先级>application.yml。

 可以理解为先读取的会被后读取的覆盖掉,所有后读取的优先级反而高

加载顺序是yml>yaml>properties

 

标签:读取,application,spring,配置,配置管理,Nacos,nacos,yaml
From: https://www.cnblogs.com/kisshappyboy/p/16951132.html

相关文章

  • Nacos注册中心
    国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。认识和安装Nacos(安装略过)Nacos是阿里巴巴的产品,现在是SpringCloud......
  • Docker 中 部署 Nacos
    hub地址:https://hub.docker.com/r/nacos/nacos-server1.拉取镜像dockerpullnacos/nacos-server2.启动【参数介绍详见hub介绍】dockerrun--namenacos-eM......
  • easylogging++的那些事(四)源码分析(四)日志格式配置管理类
    目录Configurations类成员变量成员函数析构函数默认构造函数从配置文件中加载配置解析配置文件解析字符串形式的配置设置指定日志级别的指定配置项通过Configuration对......
  • Nacos 中的配置文件如何实现加密传输
    小伙伴们知道,SpringCloudConfig很早就提供了配置文件的加解密功能,并且支持对称加密和非对称加密两种不同的模式。Nacos作为分布式配置中心+服务注册中心的合体,在配置文......
  • Spring Cloud GateWay基于nacos如何去做灰度发布
    如果想直接查看修改部分请跳转动手-点击跳转本文基于ReactiveLoadBalancerClientFilter使用RoundRobinLoadBalancer灰度发布灰度发布,又称为金丝雀发布,是一种新旧版本......
  • 基于Nacos实现日志级别的动态切换
    想要实现日志级别动态切换有两个要点:1.监听Nacos配置文件修改2.根据配置动态设置当前日志级别监听Nacos监听类代码:packagecom.yibing.nacosprovider.listener;impor......
  • Winsw将jar-bat-nacos-seata-nginx等快捷部署为windows服务
    Winsw将jar-bat-nacos-seata-nginx等快捷部署为windows服务1.软件下载WinSW的github下载地址:https://github.com/winsw/winsw/releases本文以WinSWv2.11.0为例2.注意......
  • Kubernetes(K8S) 配置管理-ConfigMap 介绍
    作用:存储不加密数据到etcd,让Pod以变量或者Volume挂载到容器中场景:配置文件创建配置文件创建ConfigMap#根据redis.properties创建redis-config[root@k8sma......
  • SpringCloud Alibaba(四) - Nacos 配置中心
    1、环境搭建1.1依赖<!--nacos注册中心注解@EnableDiscoveryClient--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-......
  • SpringCloud Alibaba(一) - Nacos 服务注册与发现,OpenFeign远程调用
    1、基础项目过目介绍1.1数据库创建1.2项目模块分布1.3测试http接口调用1.3.1http接口调用配置类//http接口调用配置类@ConfigurationpublicclassRestTempla......