SpringCloud+ACM+Nacos部署与动态刷新配置

本文介绍如何使用阿里ACM结合Nacos进行项目配置与动态刷新。以eureka为注册中心,采用SpringBoot 1.5.9RELEASE和SpringCloud Dalston.SR1版本。演示如何通过最新版Nacos (0.2.1 RELEASE) 支持自定义DataId配置,并实现自动刷新。

SpringCloud使用阿里ACM+Nacos部署项目的配置以及动态刷新

前言

关于什么是Nacos,什么是ACM在这里就不多做介绍了有兴趣的同学可以去看其官方文档。
ACM官方文档:https://help.aliyun.com/document_detail/59953.html
Nacos官方中文文档:https://nacos.io/zh-cn/docs/quick-start.html

ACM配置

项目部署

在案例项目中我们使用的仍是以eureka为注册中心的架子,springBoot使用版本为1.5.9RELEASE,
SpringCloud版本为Dalston.SR1,Nacos使用版本为当前最新版0.2.1RELEASE。
之所以使用最新版本的Nacos是因为 从 0.2.1 版本后,可支持自定义 Data Id 的配置。

  1. 添加关于Nacos的Maven支持
     <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
  1. 创建bootstarp.yaml
spring.cloud.nacos.config.access-key=XXXXXXXX
spring.cloud.nacos.config.secret-key=XXXXXXX
spring.cloud.nacos.config.namespace=b98104ba-e9d7-4467-9a72-5cb3d147aa33
spring.cloud.nacos.config.endpoint=acm.aliyun.com
spring.cloud.nacos.config.ext-config[0].data-id=com.kuanzhai.nacos.common.yaml
spring.cloud.nacos.config.ext-config[0].group=com.kuanzhai.nacos
spring.cloud.nacos.config.ext-config[0].refresh=true
  1. 在阿里云ACM中编写配置参数
    在这里插入图片描述

在这里插入图片描述
ok,自动刷新可以尝试了,但是记住的是,数据库等资源无法刷新,因为会跟注解@configuration冲突
[1]: http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference
[2]: https://mermaidjs.github.io/
[3]: https://mermaidjs.github.io/
[4]: http://adrai.github.io/flowchart.js/

`spring.cloud.nacos.config` 是 Spring Cloud Alibaba Nacos Config 模块中用于配置 Nacos 作为外部化配置中心的核心配置项。通过该配置,Spring Boot 应用可以从 Nacos 配置中心动态获取和监听配置信息。 以下是 `spring.cloud.nacos.config` 在 `application.yml` 中的**详细配置说明及示例**: ```yaml spring: cloud: nacos: config: # 配置服务器地址(必填) server-addr: 127.0.0.1:8848 # 指定配置的命名空间(可选),默认为 public 命名空间 # 可以使用命名空间ID来隔离不同环境或项目的配置 namespace: your-namespace-id # 配置分组,默认为 DEFAULT_GROUP group: DEFAULT_GROUP # 配置文件格式,支持 properties、yaml、yml(注意:yml 和 yaml 等效) file-extension: yaml # 共享配置(Shared Configuration),多个应用可以共享这些配置 shared-configs: - data-id: common-config.yaml group: COMMON_GROUP refresh: true # 是否允许运行时刷新 # 扩展配置(Extension Configs),用于更灵活地加载额外配置 extension-configs: - data-id: ext-config-common01.properties group: EXT_GROUP refresh: true # 是否开启 Nacos 配置功能(默认 true) enabled: true # 配置超时时间(毫秒) timeout: 3000 # 接入点,适用于阿里云 ACM 场景(一般本地不用设置) endpoint: acm.aliyun.com # 配置编码 encode: UTF-8 # 长轮询相关配置 long-polling-timeout: 30000 refresh-enabled: true # 是否启用自动刷新 # 是否将服务名作为前缀(如 ${spring.application.name}.${file-extension}) prefix: ${spring.application.name} # 是否启用配置缓存到本地文件 config-local-cache-dir: ./nacos/config # 是否删除不需要的配置(一般不建议开启) remove-after-seconds: 0 ``` --- ### ✅ 各配置项详细解释: | 配置项 | 说明 | |-------|------| | `server-addr` | Nacos Server 的地址,格式为 `host:port`,例如 `192.168.1.100:8848`。 | | `namespace` | 命名空间 ID,用于实现环境隔离(如 dev/test/prod)。默认是 `public` 空间(ID为空字符串)。 | | `group` | 配置所属的组,默认为 `DEFAULT_GROUP`。Nacos 控制台中可自定义。 | | `file-extension` | 配置内容的格式,支持 `properties`, `yaml`, `yml`。决定 Nacos 如何解析配置内容。 | | `shared-configs` | 引入共享配置,多个微服务可共用某些配置文件,常用于公共组件配置。 | | `extension-configs` | 扩展配置列表,支持加载多个额外的 dataId 配置,适合复杂场景。 | | `enabled` | 是否启用 Nacos 配置功能,默认 `true`。设为 `false` 可临时关闭。 | | `timeout` | 获取配置的超时时间(毫秒),默认 3000ms。网络较差时应适当调大。 | | `endpoint` | 特殊场景使用,如阿里云 ACM 服务接入点。 | | `encode` | 配置内容的编码格式,通常为 `UTF-8`。 | | `long-polling-timeout` | 长轮询等待时间,Nacos 客户端用来监听配置变更,默认 30000ms。 | | `refresh-enabled` | 是否允许配置更新时触发 Bean 刷新(配合 `@RefreshScope` 使用)。 | | `prefix` | dataId 的前缀,默认使用 `${spring.application.name}`,即服务名。 | | `config-local-cache-dir` | 将从 Nacos 下载的配置缓存到本地磁盘路径,提高容错能力。 | | `remove-after-seconds` | 不推荐使用,表示未被引用的配置在多少秒后删除。 | --- ### 📌 注意事项: 1. **dataId 的命名规则**: 默认情况下,Nacos 的 `dataId` 生成规则如下: ``` ${prefix}-${spring.profiles.active}.${file-extension} ``` 如果没有激活 profile,则为: ``` ${prefix}.${file-extension} ``` 示例: - `spring.application.name=order-service` - `spring.profiles.active=dev` - `file-extension=yaml` → dataId = `order-service-dev.yaml` 2. **共享配置扩展配置的区别**: - `shared-configs`: 更通用,推荐用于跨服务的公共配置(如日志、数据库连接池等)。 - `extension-configs`: 更灵活,可用于非标准命名的配置文件。 3. **动态刷新**: 要使配置变更生效并自动刷新,需在对应的 Bean 上添加 `@RefreshScope` 注解。 4. **命名空间建议**: 开发/测试/生产环境建议使用不同的 `namespace` 进行隔离。 --- ### ✅ 示例:实际项目中的典型配置(开发环境) ```yaml spring: application: name: user-service profiles: active: dev cloud: nacos: config: server-addr: 127.0.0.1:8848 namespace: dev-namespace-id group: USER_GROUP file-extension: yaml shared-configs: - data-id: common-datasource.yaml group: COMMON_GROUP refresh: true extension-configs: - data-id: logback-config.xml group: LOG_GROUP refresh: false timeout: 5000 refresh-enabled: true config-local-cache-dir: /data/nacos/cache ``` --- ### 🔧 相关依赖(Maven) 确保引入了以下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2022.0.0.0</version> <!-- 根据 Spring Boot 版本选择 --> </dependency> ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值