当前位置: 首页 > news >正文

nacos的配置中心

本章节主要是学习nacos的配置中心的使用,nacos里面可以存放配置文件,那么我们如何在项目里面使用(或者引入)这些配置文件呢?

什么是配置中心?

        关于配置,在开发过程中大家都十分熟悉,服务器的正常启动都需要对应的配置文件去配置一些启动参数、变量信息、数据源信息、第三方链接信息等,不同服务器它的配置有所差别。在微服务项目中,多机器、多应用、多实例的情况下就会有大量的配置文件,这些配置文件相对分散,如果我们需要更改某个配置信息,那么我们需要到该服务下面去找配置文件,如果某个服务启动了多个实例,那么我们需要该每一个实例的配置文件,这将变得非常繁琐。

        配置中心呢就是将这些文件集中起来统一管理,它将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。

主要功能

集中化配置管理:

  • 将分散在各个服务中的配置文件统一存储
  • 提供统一的配置管理界面和API

动态配置更新:

  • 支持运行时动态更新配置
  • 配置变更后自动推送到相关服务

环境隔离:

  • 支持不同环境(开发、测试、生产)的配置隔离
  • 防止配置混淆和误操作

版本管理:

  • 记录配置变更历史
  • 支持配置回滚操作

配置中心的优势

  • 降低维护成本:避免在多个服务中手动修改相同配置
  • 提高可靠性:减少因配置错误导致的故障
  • 增强灵活性:支持配置的动态调整,无需重启服务
  • 安全性:敏感配置可以加密存储和传输

 常见配置中心产品

  • Nacos:阿里巴巴开源的配置中心和注册中心
  • Spring Cloud Config:Spring Cloud官方的配置中心解决方案
  • Apollo:携程开源的配置管理中心
  • Consul:HashiCorp的分布式服务发现和配置管理工具

nacos配置中心简单介绍:

命名空间你可以看作是一个目录,一个目录下会有很多文件,每个文件也有对应的分组,其实分组也可以看作是子目录,某个命名空间下的某个分组下的某个配置文件。

命名空间的主要作用就是用来区分环境,在我们实际项目中比如数据源我们不可能都用正式环境的,也不会分成生产环境(prod),开发环境(dev),测试环境(test),不同环境配置的数据源不一样,所以我们想要使用不同环境的配置就只需要切换命名空间就可以了。

创建命名空间:(随便创建一个命名空间用于测试)

创建或导入配置文件:

nacos配置中心的简单使用

搜先我们创建一个service-provider项目,我使用的SpringBoot版本是3.2.0,spring cloud alibaba是2023.0.0,这些在父工程里面引入了对应的版本,此处省略,直接展示子工程service-provider的依赖导入

引入一些基础依赖:

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--Spring Cloud Alibaba Nacos discovery --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.4</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version><exclusions><exclusion><artifactId>com.mybatis</artifactId><groupId>mybatis-spring</groupId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-redis</artifactId><version>1.4.6.RELEASE</version></dependency>

 首先我们看一下正常没有用配置中心的application.yml文件配置:

server:port: 9993spring:application:name: service-provider1data:redis:database: 1host: localhostport: 6379datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8username: rootpassword: 123456cloud:nacos:discovery:server-addr: 127.0.0.1:8848namespace: 0f8cf46a-2f2b-4f43-934d-e4a511d47d91group: DEFAULT_GROUPusername: nacospassword: nacosloadbalancer:ribbon:enabled: falsenacos:enabled: true
logging:level:com.alibaba.cloud.nacos: debug
mybatis-plus:mapper-locations: classpath:mappers/**.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在我们使用nacos配置中心时需要引入一些必要依赖:

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><exclusions><exclusion><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId></dependency><!--开启Spring Cloud 应用程序启动时加载bootstrap配置文件--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

nacos配置中心创建了两个配置文件service-provider1.yaml和redis-config.yaml文件如下

service-provider1:

redis-config:

如何在项目下引入这两个配置文件?

我们需要创建一个bootstrap.yml文件,配置如下:

spring.cloud.nacos.config是用来配置nacos配置中心的地址的 ,本地 bootstrap.yml 中至少需要保留连接Nacos的基本配置,其实spring.cloud.nacos.discovery也可以放到配置中心去.

这样就成功引入了service-provider1.yaml和redis-config.yaml文件,那有人会说redis-config确实是在extension-configs扩展配置那里引入了,service-provider1.yaml这么都没有引入?

那是因为bootstrap.yml里面没有配置spring.cloud.nacos.config.prefix,默认使用 spring.application.name 作为配置文件前缀,会到nacos配置中心里面读取与应用同名的配置文件,如果你想使用别的文件名可以通过配置spring.cloud.nacos.config.prefix来配置

一般情况呢一些服务特有的配置会放在应用同名的配置文件里面,像一些可以通用的配置比如说redis、dubbo的配置或者其他通用数据配置可以单独放在一个配置文件里面,这样其他服务也可以通过extension-configs或者share-configs来添加配置,个人认为extension-configs和share-configs没有太大区别。

小知识补充:

配置文件加载顺序:

无Nacos情境下 Spring Boot 的启动过程:

启动-->读取bootstrap.yml配置文件(本地没有就加载默认的)-->读取项目本地配置文件application.yml-->创建Spring容器-->加载Bean

有Nacos情境下 Spring Boot 的启动过程:

启动-->读取bootstrap.yml配置文件(本地没有就加载默认的)-->读取Nacos的配置文件-->读取项目本地配置文件application.yml-->创建Spring容器-->加载Bean

上面这样配置呢我们发现还是有一点问题,如果我们需要修改nacos配置,那如果启动了多台机器,多个实例那我们还得到每个服务其下面去找到bootstrap.yml文件修改,所以我们做一点优化

我们可以通过变量的的形式来配置nacos

首先我们在maven的setting.xml里面添加环境配置

 <profiles>   <profile><!-- 本地环境--><id>local</id><properties><config.profiles.active>local</config.profiles.active><config.nacos.discovery>127.0.0.1:8848</config.nacos.discovery><config.nacos.config>127.0.0.1:8848</config.nacos.config><config.nacos.namespace>0f8cf46a-2f2b-4f43-934d-e4a511d47d91</config.nacos.namespace><config.nacos.username>nacos</config.nacos.username><config.nacos.password>nacos</config.nacos.password></properties><!-- 默认开启这个配置 --><activation><activeByDefault>true</activeByDefault></activation></profile><profile><!-- 测试环境--><id>dev</id><properties><config.profiles.active>dev</config.profiles.active><config.nacos.discovery>192.168.3.109:8848</config.nacos.discovery><config.nacos.config>192.168.3.109:8848</config.nacos.config><config.nacos.namespace>a3ec6f85-774d-486d-abf7-4c996b5fc6f2</config.nacos.namespace><config.nacos.username>nacos</config.nacos.username><config.nacos.password>nacos</config.nacos.password></properties></profile>
</profiles> 

通过

        <activation><activeByDefault>true</activeByDefault></activation>

来选择使用哪个环境配置

修改bootstrap.yml文件:

yzz:nacos:discovery: '@config.nacos.discovery@'config: '@config.nacos.config@'namespace: '@config.nacos.namespace@'username: '@config.nacos.username@'password: '@config.nacos.password@'spring:application:name: service-provider1cloud:nacos:config:server-addr: ${yzz.nacos.config} #配置中心nacos地址username: ${yzz.nacos.username}password: ${yzz.nacos.password}namespace: ${yzz.nacos.namespace} #命名空间group: DEFAULT_GROUPfile-extension: yaml #配置文件格式extension-configs: #扩展配置- data-id: redis-config #配置文件dataIdrefresh:  true #是否自动刷新discovery:server-addr: ${yzz.nacos.discovery}namespace: ${yzz.nacos.namespace}group: DEFAULT_GROUPusername: ${yzz.nacos.password}password: ${yzz.nacos.namespace}

其中@xxxx@是占位符,它会将@xxxx@替换成setting.xml对应的配置,${}也是占位符的意思,会把里面的变量替换成实际变量的值。

注意要使占位符起作用还需要在pom.xml文件里面添加 <filtering>true</filtering>

目的是启用资源过滤功能允许在构建过程中替换资源文件中的占位符

还有其他一些细节配置可以自行实践 

 

http://www.lryc.cn/news/600029.html

相关文章:

  • 学习嵌入式的第二十九天-数据结构-(2025.7.16)线程控制:互斥与同步
  • php语法--foreach和in_array的使用
  • 环境变量-进程概念(7)
  • PowerDesigner安装教程(附加安装包)PowerDesigner详细安装教程PowerDesigner 16.6 最新版安装教程
  • 7.文件操作:让程序读写文件 [特殊字符]
  • haproxy七层代理(原理)
  • 【07】C#入门到精通——C# 生成dll库 C#添加现有DLL C#调用自己生成的dll库
  • Typecho多语言解决方案:从插件到主题的完整实现
  • CANoe入门(11)-- 诊断模块
  • SpringBoot学习路径--SpringBoot的简单介绍和项目搭建
  • c++注意点(13)----设计模式(抽象工厂)
  • 医疗器械:DFEMA和PFEMA
  • 从数据脱敏到SHAP解释:用Streamlit+XGBoost构建可复现的川崎病诊断系统
  • [NLP]一个完整的 UPF 文件示例
  • 文心4.5横向对标全球大模型:技术突破与应用前景深度分析
  • OSPF 路由协议多区域
  • 利用Dify实现应用日志关键信息提取之实践
  • 九联UNT413AS_晶晨S905L3S芯片_2+8G_安卓9.0_线刷固件包
  • RK3588 HDMI-RX 驱动、RGA 加速与 OpenCV GStreamer 支持完整指南
  • React性能优化终极指南:memo、useCallback、useMemo全解析
  • 堆(Heap)优先级队列(Priority Queue)
  • python基础:request模块简介与安装、基本使用,如何发送get请求响应数据,response属性与请求头
  • 《计算机组成原理与汇编语言程序设计》实验报告一 基本数字逻辑及汉字显示
  • 机器学习详解(28):LightGBM原理
  • Linux系统编程——进程
  • 腾讯云CodeBuddy+微信小程序:5分钟开发番茄小闹钟
  • IPv6,你开始使用了吗?
  • 学习日志18 python
  • 从入门到进阶:JavaScript 学习之路与实战技巧
  • [科普] 快速傅里叶变换(FFT)和离散傅里叶变换(DFT)的差异