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

Nacos 配置共享文件 如何在Nacos配置共享文件

这里以黑马程序员的黑马商城为例!!!

在每一个服务中,我们希望将一些常用的配置抽取出来,并在 Nacos 配置中心进行统一管理,同时支持动态更新,避免每次修改配置都需要重启服务。


1. 共享配置的整理与存储到 Nacos

1.1 识别可共享的配置

在多个微服务中,可能会用到相同的配置,比如:

  • 数据库(JDBC)相关配置
  • 日志配置
  • Swagger & OpenFeign 配置

这些配置如果每个服务都单独维护,不仅重复,而且难以维护,因此可以抽取出来放到 Nacos 配置中心,供多个服务共享。


1.2 在 Nacos 配置中心存储共享配置

步骤:

  1. 进入 Nacos 控制台 → 配置管理 → 配置列表
  2. 新建配置,分别添加以下共享配置文件

每一个配置文件的分组统一设置为默认DEFAULT_GROUP

① JDBC 相关配置(shared-jdbc.yaml

spring:
  datasource:
    url: jdbc:mysql://192.168.48.128:3306/${hm.db.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: rootroot
mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
  global-config:
    db-config:
      update-strategy: not_null
      id-type: auto

首先考虑到,每一个服务的数据库的数据库名不一样,其他的账号密码端口号等可能无变化,所以这里可以使用${hm.db.database}占位符来配置,然后我们在每一个服务的配置文件中写入数据库名字即可,一定要与nacos共享配置文件中的格式一致,hm.db.database

也可以使用更为灵活的配置

spring:
  datasource:
    url: jdbc:mysql://${hm.db.host:192.168.150.101}:${hm.db.port:3306}/${hm.db.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ${hm.db.un:root}
    password: ${hm.db.pw:123}
mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
  global-config:
    db-config:
      update-strategy: not_null
      id-type: auto

以数据库ip为例,${hm.db.host:192.168.150.101}表示如果没有配置hm.db.host,则默认以192.168.150.101为ip地址,端口号、账号和密码同理!

🔹 关键点:

  • hm.db.hosthm.db.port 等参数使用了 占位符,可以在不同环境下灵活覆盖默认值,提高配置的可变性

② 统一日志配置(shared-log.yaml

logging:
  level:
    com.hmall: debug
  pattern:
    dateformat: HH:mm:ss:SSS
  file:
    path: "logs/${spring.application.name}"

🔹 关键点:

  • 日志文件存放路径 logs/${spring.application.name} 采用 服务名称 作为日志文件夹的名称,方便分类管理。


③ Swagger & OpenFeign 配置(shared-swagger.yaml

knife4j:
  enable: true
  openapi:
    title: ${hm.swagger.title:黑马商城接口文档}
    description: ${hm.swagger.description:黑马商城接口文档}
    email: ${hm.swagger.email:zhanghuyi@itcast.cn}
    concat: ${hm.swagger.concat:虎哥}
    url: https://www.itcast.cn
    version: v1.0.0
    group:
      default:
        group-name: default
        api-rule: package
        api-rule-resources:
          - ${hm.swagger.package}

🔹 关键点:

  • 占位符 方式支持不同服务自定义 Swagger 文档的 titleemailconcat 等信息。

将共享文件配置完后,应该如何让每一个服务在启动时去nacos拉取这些信息呢?


2. 微服务如何拉取 Nacos 共享配置

2.1 需要先配置 bootstrap.yaml

⚠️ 注意:
Spring Cloud 在初始化上下文时,会优先加载 bootstrap.yaml,然后再加载 application.yaml
所以 Nacos 连接信息 需要写在 bootstrap.yaml 里,否则无法加载共享配置。

📌 配置 bootstrap.yaml

spring:
  application:
    name: cart-service # 服务名称
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: 192.168.48.128 # nacos地址
      config:
        file-extension: yaml # 文件后缀名
        shared-configs: # 共享配置
          - dataId: shared-jdbc.yaml # 共享mybatis配置
          - dataId: shared-log.yaml # 共享日志配置
          - dataId: shared-swagger.yaml # 共享日志配置
          - dataId: shared-seata.yaml # 共享seata配置

🔹 关键点:

  • shared-configs 指定共享配置文件,这里的dataId就是刚才在nacos添加的文件名称,Nacos 会自动拉取这些配置并合并到 application.yaml

2.2 修改 application.yaml

因为部分配置已经抽取到 bootstrap.yamlapplication.yaml 只需要保留当前服务的独有配置


server:
  port: 8082
feign:
  okhttp:
    enabled: true # 开启OKHttp连接池支持
  sentinel:
    enabled: true # 开启Feign的sentinel整合
hm:
  db:
    database: hm-cart
  swagger:
    title: 购物车服务接口文档
    package: com.hmall.cart.controller

🎯 现在 cart-service 服务启动时,会自动从 Nacos 拉取共享配置!

2.3 引入对应的Bootstrap依赖

        <!--nacos 服务注册发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
<!--        读取共享配置文件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

引入完毕后启动项目时会去nacos读取配置信息


http://www.kler.cn/a/568657.html

相关文章:

  • 如何编写一个基本的 Makefile
  • 【Docker】使用Docker搭建-MySQL数据库服务
  • 基于PythonPython面向复杂场景的高质量图像合成方法研究
  • 【数据结构】LRUCache|并查集
  • 钉钉小程序(企业内部应用)开发下载预览文件
  • Nginx负载均衡策略详解:从轮询到智能分发,打造高可用服务架构
  • 专题一四数之和
  • 蓝桥杯刷题周计划(第一周)
  • 文献分享: Muvera多向量到单向量的转化方法——原理与理论保证
  • P8637 [蓝桥杯 2016 省 B] 交换瓶子
  • Element Plus使用(五)
  • Windows本地Docker+Open-WebUI部署DeepSeek
  • LeetCode 热题100 438. 找到字符串中所有字母异位词
  • 【文献阅读】Faster and Lighter LLMs: A Survey on Current Challenges and Way Forward
  • 【vue-echarts】——01.认识echarts
  • 线性回归:机器学习基础算法全解析
  • 【Linux】进程替换(七)
  • 小程序中的插槽(Slot)机制及其与 Vue 组件的异同
  • git 的 Detached HEAD
  • 作业及参考