IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringCloud Alibaba之Nacos Config 配置中心 -> 正文阅读

[Java知识库]SpringCloud Alibaba之Nacos Config 配置中心

Nacos Config配置中心官方文档

简介

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

快速开始

Nacos 服务端初始化

建议是使用Nacos提供的数据库配置方式,因为添加的配置会持久化到数据库中

添加配置

在这里插入图片描述
在这里插入图片描述

3.权限控制

在这里插入图片描述

使用权限控制需要开启nacos配置里面的权限配置
文件位置: */nacos/conf/application.properties
默认为:false改为:true

在这里插入图片描述

整合配置中心

添加依赖

<!-- Nacos Config 依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

添加配置文件

在启动服务之前,必须使用bootstrap.properties 或者 bootstrap.yaml 配置文件来配置Nacos Server 地址
注意当你使用域名的方式来访问 Nacos 时,spring.cloud.nacos.config.server-addr 配置的方式为 域名:port。 例如 Nacos 的域名为abc.com.nacos,监听的端口为 80,则 spring.cloud.nacos.config.server-addr=abc.com.nacos:80。 注意 80 端口不能省略。

spring.application.name: nacos-config
spring.cloud.nacos.config.server-addr: 127.0.0.1:8848
spring.cloud.nacos.config.file-extension: yaml
spring.cloud.nacos.config.refresh.enabled: false #来关闭动态刷新,一般用不上

application.yaml

server:
  port: 8088
spring:
  application:
    #application.name 对应的是Nacos Config配置的 DataID application.name的配置可以是配置在application.yaml中也可以配置在bootstrap.yaml中
    #除了默认的配置文件,其他配置文件必须写上后缀
    name: com.nacos.config  

bootstrap.yaml配置

#除了配置中心当中的配置会写在bootstrap.yaml中,其他需要的配置一般都是写在application.yaml中
spring:
  cloud:
    nacos:
      server-addr: localhost:8848   #如果通过域名访问nacos,则 地址为 域名:8848,如果端口号为80,也必须配置,不能省略
      username: nacos
      password: nacos
      config:
        #声明 dataid 文件扩展名 这里配置的文件扩展名是指Nacos Config 配置管理中的配置格式,默认为Properties 只针对默认的配置文件
        #如果使用Properties格式进行配置可以不用指定格式,如果改为其他格式则需要指定文件格式,否则会报错
       file-extension: yaml
#       refresh:
         #nacos config 的主要特性动态刷新配置信息,当我们更新了配置文件之后程序会在10ms内刷新配置,这里可以手动关闭,但是一般用不上
#         enabled: false

spring-cloud-starter-alibaba-nacos-config 也支持配置的动态更新,启动 Spring Boot 应用测试的代码如下:

@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
        while(true) {
            //当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
            String userAge = applicationContext.getEnvironment().getProperty("age");
            System.err.println("; age: " + userAge);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

测试结果

age: 22
age: 22
age: 22
2022-10-26 15:04:25.069  INFO 32957 --- [-127.0.0.1:8848] o.s.boot.SpringApplication               : Started application in 0.144 seconds (JVM running for 71.752)
2022-10-26 15:04:25.070  INFO 32957 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@10c89124: startup date [Fri Nov 02 15:04:25 CST 2022]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@6520af7
2022-10-26 15:04:25.071  INFO 32957 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6520af7: startup date [Fri Nov 02 15:04:24 CST 2022]; root of context hierarchy

可支持profile粒度的配置

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

spring.profiles.active: develop

新建一个develop环境的配置

默认配置
在这里插入图片描述
profile配置
在这里插入图片描述

application.yaml

#在配置中心: 可以通过profile 进行设置
#只有默认的配置文件才能结合profile进行使用
#对应的DataID命名格式: s p r i n g . a p p l i c a t i o n . n a m e ? {spring.application.name}- spring.application.name?{profile}.${file-extension:properties}

server:
  port: 8088
spring:
  application:
    name: nacos.config-develop.yaml
  profiles:
    active: dev
#在配置中心:  可以通过profile 进行设置
#只有默认的配置文件才能结合profile进行使用
#对应的DataID命名格式:${spring.application.name}-${profile}.${file-extension:properties}

bootstrap.yaml

#除了配置中心当中的配置会写在bootstrap.yaml中,其他需要的配置一般都是写在application.yaml中
spring:
  cloud:
    nacos:
      server-addr: localhost:8848   #如果通过域名访问nacos,则 地址为 域名:8848,如果端口号为80,也必须配置,不能省略
      username: nacos
      password: nacos
      config:
        #声明 dataid 文件扩展名 这里配置的文件扩展名是指Nacos Config 配置管理中的配置格式,默认为Properties 只针对默认的配置文件
        #如果使用Properties格式进行配置可以不用指定格式,如果改为其他格式则需要指定文件格式,否则会报错
       file-extension: yaml

测试代码

@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
        while(true) {
            String userName = applicationContext.getEnvironment().getProperty("name");
            String userAge = applicationContext.getEnvironment().getProperty("age");
            System.err.println("username :" + userName + "; age: " + userAge);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

测试结果

user name :测试; age: 22
2022-10-26 15:34:25.013  INFO 33014 --- [ Thread-11] ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6f1c29b7: startup date [Fri Nov 26 15:33:57 CST 2022]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@63355449

#配置文件的优先级 (优先级大的会覆盖优先级小的,当优先级大的不存在配置时会向下获取优先级小的配置)
#比如 profile => name: 测试 ,
默认配置=> name: 默认配置 age: 22
获取到的配置为 name: 测试 , age: 22
#profile > 默认配置文件

自定义 namespace 的配置(命名空间默认为public)

环境隔离优先使用自定义命名空间来进行隔离,因为nacos权限控制只能对命名空间进行控制.不建议使用profile的方式处理环境隔离
在这里插入图片描述

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

支持自定义 Group 的配置

group是对命名空间更细粒度的分归类 在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

自定义扩展的 Data Id 配置

Spring Cloud Alibaba Nacos Config 从 0.2.1 版本后,可支持自定义 Data Id 的配置。
spring.cloud.nacos.config.extension-configs[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
优先级
#profile > 默认配置文件(dataID 与application.name相同的 ) > extension-configs(下标越大优先级越大) > shared-configs(下标越大优先级越大)

有两种配置方式:
第一种:shared-configs (shared-configs是一个集合,yaml读取集合的方式有两种,一直是 - 来获取,一种是通过下标获取)

 spring.cloud.nacos.config.shared-configs:
                                 - data-id:
                                   group:
                                   refresh: 
                                 - data-id:
                                   group:
                                   refresh:         

下标的方式获取

 #配置支持共享的 Data Id
spring.cloud.nacos.config.shared-configs[0]:
                                 data-id: common.yaml
#配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
                                 group: GROUP_APP
#配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
                                 refresh: true
spring.cloud.nacos.config.shared-configs[1]: 
                                 data-id: common1.yaml  
                                 group: GROUP_APP1  
                                 refresh: true                               

第二种:extension-configs (extension-configs也是一个集合)

 spring.cloud.nacos.config.extension-configs:
                                 - data-id:
                                   group:
                                   refresh: 
                                 - data-id:
                                   group:
                                   refresh:         

下标的方式获取

 #配置支持共享的 Data Id
spring.cloud.nacos.config.extension-configs[0]:
                                 data-id: common.yaml
#配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
                                 group: GROUP_APP
#配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
                                 refresh: true
spring.cloud.nacos.config.extension-configs[1]: 
                                 data-id: common1.yaml  
                                 group: GROUP_APP1  
                                 refresh: true
# config external configuration
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.extension-configs[0]:
                                    data-id: config-common01.properties

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

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

在代码中通过@value 来获取nacos config中的配置参数时,如果配置进行了更新,@value是无法感知到的,需要在对应的类上加上@RefreshScope注解

@RefreshScope

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:40:47  更:2022-10-31 11:46:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 4:20:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码