首页 > 其他分享 >五、SpringCloud alibaba 之 nacos配置中心

五、SpringCloud alibaba 之 nacos配置中心

时间:2024-04-03 22:23:45浏览次数:10  
标签:extension spring 配置 nacos alibaba SpringCloud config cloud

https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

5.1、创建配置文件

进去Nacos的服务端,在服务端的配置管理 功能里面的配置列表 里面创建一个配置文件

在创建配置文件时,要填写dataId

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。

  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。

通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。

创建的配置文件内容如下:

 

5.2、配置nacos客户端

入门示例

在5.1中 在nacos的服务端配置好文件之后,需要在客户端读取配置文件的内容。首先在application.propertis或者application.yml中连接nacos的服务端。

server.port=8083
#配置的dataId的prefix, 默认读取的是spring.application.name的值,也可以通过spring.cloud.nacos.config.prefix来配置
spring.application.name=test
# nacos服务端地址
spring.cloud.nacos.server-addr=localhost:8848

创建一个配置类

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {
    private String name;
    private String password;
}

创建一个controller类

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


    @Value("${user.name}")
    private String userName;

    @Autowired
    private UserProperties userProperties;

    @RequestMapping("/getUserName")
    public String getUserName(){
         System.out.println(userProperties);
        System.out.println(userName);
         return "success";
    }
}

运行结果

把配置文件中的user.name的值改成李四,运行结果

我们可以看到通过UserProperties配置类接收的配置信息更新了,但是在UserController类中通过@Value接收的配置信息没有更新。

如果想要UserController类中通过@Value接收的配置信息也实时更新,需要在类是添加@RefreshScope注解,因此我们建议nacos配置类的配置信息尽量采取配置类和@ConfigurationProperties结合的方式来接收。

 

共享配置

本笔记采取的是spring cloud alibaba版本是2.2.6.RELEASE,springboot版本是2.3.2.RELEASE,因此该配置必须放在 bootstrap.properties 文件中才会生效,放在application配置文件中是不生效的。关于这部分详细的设计可参考 这里。 一个完整的配置案例如下所示

# config external configuration
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.extension-configs[0].data-id=test1

# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.extension-configs[1].data-id=test2
spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP

# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.extension-configs[2].data-id=test3
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true

可以看到:

  • 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的配置方式来支持多个 Data Id 的配置。

  • 通过 spring.cloud.nacos.config.extension-configs[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。

  • 通过 spring.cloud.nacos.config.extension-configs[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。

application与bootstrap的优先级

我们要在微服务拉取共享配置。将拉取到的共享配置与本地的application.yaml配置合并,完成项目上下文的初始化。

不过,需要注意的是,读取Nacos配置是SpringCloud上下文(ApplicationContext)初始化时处理的,发生在项目的引导阶段。然后才会初始化SpringBoot上下文,去读取application.yaml

也就是说引导阶段,application.yaml文件尚未读取,根本不知道nacos 地址,该如何去加载nacos中的配置文件呢?

SpringCloud在初始化上下文的时候会先读取一个名为bootstrap.yaml(或者bootstrap.properties)的文件,如果我们将nacos地址配置到bootstrap.yaml中,那么在项目引导阶段就可以读取nacos中的配置了。

标签:extension,spring,配置,nacos,alibaba,SpringCloud,config,cloud
From: https://www.cnblogs.com/cplinux/p/18113625

相关文章

  • k8s + springcloud 微服务开发调试工具kt Connect的使用
    概览KtConnect(全称KubernetesToolkitConnect)是一款基于Kubernetes环境用于提高本地测试联调效率的小工具。通过这个工具,可以不在本地启动所有服务,只需启动当前开发的服务即可,其它服务使用的是部署在k8s集群的实例,如下图:Reference官方文档:https://github.com/alibaba/......
  • Eureka vs. Nacos:注册中心角色之间的不同特性
    此文章简要介绍一下Eureka和Nacos在注册中心功能上规则、功能的不同服务拉取机制这一部分内容我们可以引入两个远程调用最初的问题来引入消费者如何得知提供者信息,包括url,健康状态等?当程序并发量大,提供者以集群部署时,应该如何选择?根据此二问题,衍生出了服务拉取等环节(服......
  • Nacos注册中心
    1.Nacos介绍Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件,相对于Eureka功能更加丰富,在国内受欢迎程度高。Nacos安装地址Release1.4.7(Jan15th,2024)·alibaba/nacos·GitHub2.Nacos安装过程下载安装包之后,解压到没有中文的路径下,我这里安装在D盘Nacos默认......
  • 微服务集成Spring Cloud Alibaba Seata(一)Seata服务搭建
    1、Seata介绍Seata是阿里开源的一款分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。数据库事务我们都知道,事务都是遵循ACID原则。而通过使用Seata可以实现在两个服务模块通过RPC调用时触发事务,如果有异常会实现业务数据回滚,保证数据的一致性。官网地址:https://......
  • 微服务篇---springcloud高频面试题(2)☁️
    SpringCloud项目中有没有做过限流?怎么做的?Nginx限流-控制速率Nginx限流-控制连接数......
  • Nacos
    一、搭建NacosServer        下载        启动二、将应用注册到Nacos        依赖        注解        配置        控制台    测试三、服务发现的领域模型        Nameplace:实现隔离,默认public......
  • Java从坚持到精通-SpringCloud(持续更新中)
    1.什么是SpringCloud以及与SpringBoot的关系SpringCloud是一系列框架的有序集合。SpringBoot为SpringCloud提供了代码实现环境,使用SpringBoot将其他组合有机融合到了SpringCloud的体系中了。所以说,SpringCloud是基于SpringBoot的微服务系统架构的一站式解决方案。2.SpringClo......
  • SpringCloud下的微服务应用技术(结尾篇)
    六.Feign远程调用6.1替代RestTemplateRestTemplate调用问题:代码可读性差,参数复杂且URL难维护。Feign是一个声明式的HTTP客户端,官方地址:GitHub-OpenFeign/feign:Feignmakeswritingjavahttpclientseasier它可以解决上述提到的问题。STEP1:首先,在orderservice中引......
  • springcloudgatewayRCE(spEl表达式)
    CVE-2022-22947SpringCloudGatewayRemoteCodeExecute漏洞/SpELCodeInjection漏洞基本介绍cloud全家桶网关作用l智能路由l负载均衡l协议转换l权限校验l限流熔断l黑白名单lAPI监控l日志审计SpringCloutGateway使用<dependency><groupId>org.......
  • SpringBoot项目接入Nacos的实现步骤
    前言项目中没有使用nacos官方提供的方式使用SpringBoot的集成方式来进行集成,而是使用了AlibabaSpringCloud的依赖包进行集成。原因是因为官网提供的SpringBoot集成方式中,同时使用配置中心和服务发现功能,会使得服务发现功能配置的部分属性冲突不生效。最直接的就是配置中心和服......