SpringCloud 整合Nacos config

简介: SpringCloud 整合Nacos config

引入nacos config依赖

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
</dependencies>

编写bootstrap.properties 文件内容

spring.application.name=nacosconfig
spring.cloud.nacos.config.server-addr=localhost:8848
${spring.application.name}.${file-extension.properties}

编写nacos config 配置  命名为  nacosconfig.properties

修改StudyNacosConfigApplication 类

package com.jiuge.study;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class StudyNacosConfigApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext =  SpringApplication.run(StudyNacosConfigApplication.class, args);
        String userName = applicationContext.getEnvironment().getProperty("common.name");
        String userAge = applicationContext.getEnvironment().getProperty("common.age");
        System.out.println("common name :"+userName+"; age: "+userAge);
    }
}

启动,测试, 控制台输出一下内容

common name :fox; age: 33

支持配置的动态更新, 修改启动类

package com.jiuge.study;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.concurrent.TimeUnit;
@SpringBootApplication
public class StudyNacosConfigApplication {
    public static void main(String[] args) throws InterruptedException {
        ConfigurableApplicationContext applicationContext =  SpringApplication.run(StudyNacosConfigApplication.class, args);
        while (true) {
            String userName = applicationContext.getEnvironment().getProperty("common.name");
            String userAge = applicationContext.getEnvironment().getProperty("common.age");
            System.err.println("common name :" + userName + "; age: " + userAge);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

启动,测试, 控制台每隔一秒输出内容

common name :haha; age: 22
common name :haha; age: 22
common name :haha; age: 22
common name :aaaa; age: 23
common name :aaaa; age: 23
common name :aaaa; age: 23
common name :aaaa; age: 23
common name :aaaa; age: 23
common name :aaaa; age: 23

支持profile粒度的配置

spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为 ${spring.application.name}.${file-extension:properties} 为前缀的基础配置,还加载了dataid为 ${spring.application.name}-${profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

spring.profiles.active=dev

nacos 注册中心上添加配置  nacosconfig-prod.properties

内容如下

common.name=jiuge
common.age=27

修改bootstrap.properties文件

spring.application.name=nacosconfig
spring.cloud.nacos.config.server-addr=localhost:8848
# 通过 变量扩展名的方式进行命名
#${spring.application.name}.${file-extension.properties}
spring.profiles.active=prod
#profile粒度的配置
${spring.application.name}-${profile}.${file-extension.properties}

变换成yml 配置

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
  application:
    name: nacosconfig
  profiles:
    active: prod

在nacos 上配置 nacosconfig-prod.properties

内容如下

common.name=jiuge
common.age=27

控制台输出

common name :小苗; age: 30
common name :小苗; age: 30

支持自定义namespace的配置

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

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

spring.cloud.nacos.config.namespace=e39f93ae-bcc9-4539-99b8-38b9a9054224

nacos 配置中心上添加命名空间

在新建的命名空间下 新建内容

内容为

common.name=小舞
common.age=19

bootstrap.yml 配置如下

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        namespace: e39f93ae-bcc9-4539-99b8-38b9a9054224
  application:
    name: nacosconfig
  profiles:
    active: dev

测试,验证,控制台输出

common name :小舞; age: 19
common name :小舞; age: 19
common name :小舞; age: 19

支持自定义Group 的配置

Group是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULTGROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 databaseurl 配置和 MQtopic 配置。在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下,默认是DEFAULTGROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

添加DEVELEOP_GROUP配置

common.name=宁荣荣
common.age=21

修改yml配置

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        namespace: e39f93ae-bcc9-4539-99b8-38b9a9054224
        group: DEVELOP_GROUP
  application:
    name: nacosconfig
  profiles:
    active: dev

验证,控制台输出

common name :宁荣荣; age: 21
common name :宁荣荣; age: 21

nacos 配置中心加上 nacosconfig-prod.properties 配置

nacosconfig-prod.properties 的配置内容为

common.name=竹清
common.age=20

修改yml配置

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        namespace: e39f93ae-bcc9-4539-99b8-38b9a9054224
        group: DEVELOP_GROUP
  application:
    name: nacosconfig
  profiles:
    active: prod

测试,验证, 控制台输出

common name :竹清; age: 20
common name :竹清; age: 20

支持自定义扩展的Data Id 配置

Data ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

通过自定义扩展的Data Id 配置, 既可以解决多个应用间配置共享的问题, 又可以支持一个应用有多个配置文件

# 自定义 Data Id 的配置
#不同工程的通用配置 支持共享的 DataId
spring.cloud.nacos.config.sharedConfigs[0].data-id= common.yaml
spring.cloud.nacos.config.sharedConfigs[0].group=REFRESH_GROUP
spring.cloud.nacos.config.sharedConfigs[0].refresh=true
# config external configuration
# 支持一个应用多个 DataId 的配置
spring.cloud.nacos.config.extensionConfigs[0].data-id=ext-config-common01.properties
spring.cloud.nacos.config.extensionConfigs[0].group=REFRESH_GROUP
spring.cloud.nacos.config.extensionConfigs[0].refresh=true
spring.cloud.nacos.config.extensionConfigs[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.extensionConfigs[1].group=REFRESH_GROUP
spring.cloud.nacos.config.extensionConfigs[1].refresh=true 

nacos 配置中心添加配置 common.yaml 文件

内容如下

common:
    age: 20
    name: 小奥

修改bootstrap.yml 配置文件内容为

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        namespace: e39f93ae-bcc9-4539-99b8-38b9a9054224
        shared-configs[0].data-id: common.yaml
        shared-configs[0].group: DEFAULT_GROUP
        shared-configs[0].refresh: true
  application:
    name: studyconfig

在nacos 配置中心上添加配置 文件 common-ext.yaml

common:
    type: 男生女生
    name: helloc

修改bootstrap.yml 配置文件内容为

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        namespace: e39f93ae-bcc9-4539-99b8-38b9a9054224
        shared-configs[0].data-id: common.yaml
        shared-configs[0].group: DEFAULT_GROUP
        shared-configs[0].refresh: true
        shared-configs[1].data-id: common-ext.yaml
        shared-configs[1].group: REFRESH_GROUP
        shared-configs[1].refresh: true
        shared-configs[2].data-id: common-share.yaml
        shared-configs[2].group: REFRESH_GROUP
        shared-configs[2].refresh: true
  application:
    name: studyconfig

spring启动程序

package com.jiuge.study;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.concurrent.TimeUnit;
@SpringBootApplication
public class StudyNacosConfigApplication {
    public static void main(String[] args) throws InterruptedException {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(StudyNacosConfigApplication.class, args);
        while (true) {
            String userName = applicationContext.getEnvironment().getProperty("common.name");
            String userAge = applicationContext.getEnvironment().getProperty("common.age");
            String ddd = applicationContext.getEnvironment().getProperty("common.type");
            String eee = applicationContext.getEnvironment().getProperty("common.name");
            System.err.println("common name :" + userName + "; age: " + userAge + ", type=" + ddd + " ; eee:=" + eee);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

测试,验证,输出

common name :gaogao; age: 20, type=男生女生 ; eee:=gaogao
common name :gaogao; age: 20, type=男生女生 ; eee:=gaogao
common name :gaogao; age: 20, type=男生女生 ; eee:=gaogao

配置的优先级

Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。

A: 通过 spring.cloud.nacos.config.shared-configs 支持多个共享 Data Id 的配置

B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置

C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

当三种方式共同使用时,他们的一个优先级关系是:A < B < C

优先级从高到低

优先级从高到低:
1) nacos-config-product.yaml 精准配置
2) nacos-config.yaml 同工程不同环境的通用配置
3) ext-config: 不同工程 扩展配置
4) shared-dataids 不同工程通用配置: common2.yml > common1.yml

@RefershScope 注解

@Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解

package com.jiuge.study.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class ScopeRefershController {
    @Value("${common.name}")
    private String name;
    @Value("${common.age}")
    private String age;
    @GetMapping("/common")
    public String hello() {
        return "name =" + name + ",age = " + age;
    }
}

测试,验证

nacos 配置中心的配置如下

common.name=rrw
common.age=12

请求接口  http://localhost:8080/common/      输出

name =rrw,age = 12

修改nacos 的配置

common.name=jiuge   
common.age=18

请求接口  http://localhost:8080/common/   , 输出

name =jiuge ,age = 18
目录
相关文章
|
3月前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
261 0
|
1月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
128 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
1月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
2月前
|
Java 开发工具 对象存储
简化配置管理:Spring Cloud Config与Netflix OSS中的动态配置解决方案
简化配置管理:Spring Cloud Config与Netflix OSS中的动态配置解决方案
46 2
|
1月前
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
59 0
|
3月前
|
Cloud Native Java Nacos
Spring Cloud Config、Apollo、Nacos和Archaius对比
这篇文章对比了Spring Cloud Config、Apollo、Nacos和Archaius这四种配置中心的适应场景、优缺点。文中讨论了它们的功能特点,例如Spring Cloud Config的集中化配置管理和动态刷新能力,Apollo的实时配置推送和权限治理,Nacos的服务发现和管理功能,以及Archaius的动态配置更新能力。文章指出选择配置中心应根据项目需求和架构来决定,并提供了一个对比图来帮助读者更直观地理解这些工具的差异。
90 1
Spring Cloud Config、Apollo、Nacos和Archaius对比
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
3月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
3月前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心

热门文章

最新文章

  • 1
    Spring Boot与Spring Cloud Config的集成
    212
  • 2
    若依修改标题和icon,在vue.config.js和.env.development进行修改
    318
  • 3
    若依修改,若依的com.ruoyi.framework.config在那?搜索文件使用ctrl+shift+f不用搜狗输入法,其他輸入法,用英文
    44
  • 4
    若依修改,若依部署在本地运行时的注意事项,后端连接了服务器,本地的vue.config.js要先改成localhost:端口号与后端匹配,部署的时候再改公网IP:端口号
    157
  • 5
    部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
    70
  • 6
    若依修改---重新部署项目注意事项,新文件初始化需要修改的地方,打包后的文件很难进行修改,如果想要不断修改项目,注意保存原项目,才可以不断修改,前端:在Vue.config.js文件中修改target
    131
  • 7
    若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
    618
  • 8
    文本vitepress,如何设置背景图,如何插入背景图,如何插入logo,为了放背景图片,我们要新建pubilc的文件夹,插入logo要在config.js中进行配置,注意细节,在添加背景时,注意格式
    137
  • 9
    文本,vitepress的使用,如何使用vitevitepress没有config.js该怎么办?这里使用vitepress进行手动配置,参考只爭朝夕不負韶華的文章
    66
  • 10
    vue 配置【详解】 vue.config.js ( 含 webpack 配置 )
    68