Spring Cloud Alibaba配置
你好呀,我的老朋友!我是老寇,欢迎来到老寇IoT云平台!
配置前缀:
spring.cloud.nacos.discovery
将服务注册到 Nacos 注册中心,并从中发现其他服务。
# 配置项
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabled | boolean | true | 是否开启服务注册与发现 |
server-addr | string | — | Nacos 服务地址(如 127.0.0.1:8848) |
namespace | string | — | 命名空间 ID,用于环境隔离(dev / test / prod) |
username | string | — | Nacos 登录用户名 |
password | string | — | Nacos 登录密码 |
group | string | DEFAULT_GROUP | 服务分组 |
secure | boolean | false | 是否启用 HTTPS 通信 |
ephemeral | boolean | true | true = 临时实例(默认),false = 持久实例 |
cluster-name | string | — | 集群名称,用于同集群优先调用 |
heart-beat.enabled | boolean | true | 是否开启心跳检测 |
heart-beat-interval | int (ms) | 5000 | 心跳发送间隔(毫秒) |
heart-beat-timeout | int (ms) | 15000 | 超过此时间无心跳,标记为不健康(毫秒) |
# 示例
spring:
cloud:
nacos:
discovery:
# 开启服务注册&发现
enabled: true
server-addr: ${NACOS_DISCOVERY_ADDRESS:nacos:8848}
namespace: ${NACOS_NAMESPACE:public}
username: ${NACOS_USERNAME:nacos}
password: ${NACOS_PASSWORD:nacos}
group: ${NACOS_GROUP:IOT_GROUP}
# 是否启用 HTTPS
secure: false
# true 临时实例 / false 持久实例
ephemeral: true
cluster-name: ${NACOS_CLUSTER_NAME:iot-cluster}
heart-beat:
# 开启心跳检测
enabled: true
# 每 10 秒发送一次心跳
heart-beat-interval: 10000
# 超过 30 秒无心跳标记为不健康
heart-beat-timeout: 30000
💡 提示: 使用环境变量(
${NACOS_DISCOVERY_ADDRESS:nacos:8848})可使同一份配置在不同环境中复用,仅需在启动参数或.env文件中切换。
# 2. Nacos 配置中心(Config)
配置前缀:
spring.cloud.nacos.config
从 Nacos 拉取外部化配置,支持动态刷新。
# 配置项
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabled | boolean | true | 是否开启配置中心 |
server-addr | string | — | Nacos 配置中心地址 |
namespace | string | — | 命名空间 ID |
username | string | — | Nacos 登录用户名 |
password | string | — | Nacos 登录密码 |
cluster-name | string | — | 集群名称 |
file-extension | string | properties | 读取的配置文件格式:yaml / properties / json |
group | string | DEFAULT_GROUP | 配置分组 |
refresh-enabled | boolean | true | 是否启用配置动态刷新 |
# 示例
spring:
cloud:
nacos:
config:
# 开启配置中心
enabled: true
server-addr: ${NACOS_CONFIG_ADDRESS:nacos:8848}
namespace: ${NACOS_NAMESPACE:public}
username: ${NACOS_USERNAME:nacos}
password: ${NACOS_PASSWORD:nacos}
cluster-name: ${NACOS_CLUSTER_NAME:iot-cluster}
# 指定读取的文件格式
file-extension: yaml
group: ${NACOS_GROUP:IOT_GROUP}
refresh-enabled: true
⚠️ 重要:
file-extension必须与 Nacos 控制台上配置的 Data ID 后缀一致。例如 Data ID 为laokou-auth.yaml,则此处必须填yaml。
# 3. Nacos 配置导入(Config Import)
配置前缀:
spring.config.import
Spring Boot 2.4+ 引入的标准配置导入方式,用于从 Nacos 拉取指定配置文件。
# 配置项
| 参数 | 说明 |
|---|---|
optional:nacos:<dataId> | 要拉取的 Nacos 配置文件 Data ID,optional: 表示文件不存在时不报错 |
refreshEnabled=true | 开启配置自动刷新 |
group=<GROUP> | 指定配置所属分组(解决默认 DEFAULT_GROUP 问题) |
# 示例
spring:
config:
import:
# 拉取 nacos 配置文件,指定 group 避免默认 DEFAULT_GROUP 问题
- optional:nacos:laokou-auth.yaml?refreshEnabled=true&group=${NACOS-GROUP}
📝 说明: 使用
optional:前缀后,即使 Nacos 上不存在该配置文件,应用也能正常启动,不会抛出异常。
# 4. 负载均衡(Loadbalancer)
配置前缀:
spring.cloud.loadbalancer
Spring Cloud LoadBalancer 客户端负载均衡配置,项目中集成了 Nacos 负载均衡策略。
# 配置项
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
nacos.enabled | boolean | false | 是否使用 Nacos 权重负载均衡策略(替代默认的 RoundRobin) |
# 示例
spring:
cloud:
loadbalancer:
nacos:
# 启用 Nacos 权重负载均衡
enabled: true
💡 提示: 启用后,LoadBalancer 将结合 Nacos 中服务实例的权重和集群信息进行路由,优先选择同集群、高权重的实例,适用于多机房、灰度发布等场景。
# 5. Sentinel 流量防护
配置前缀:
spring.cloud.sentinel
Alibaba Sentinel 提供流量控制、熔断降级、系统负载保护。
# 5.1 基础配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
eager | boolean | false | 是否饥饿加载(启动时即初始化 Sentinel,而非首次调用时) |
web-context-unify | boolean | true | 是否统一 Web 上下文。设为 false 可对不同 URL 分别限流 |
filter.enabled | boolean | true | 是否启用 Sentinel 的 Servlet Filter 拦截 |
transport.dashboard | string | — | Sentinel Dashboard 地址(如 sentinel:8972) |
# 5.2 数据源配置(Nacos 持久化规则)
配置前缀:
spring.cloud.sentinel.datasource.<name>.nacos
将 Sentinel 规则持久化到 Nacos,避免重启丢失。
| 配置项 | 类型 | 说明 |
|---|---|---|
server-addr | string | Nacos 服务地址 |
namespace | string | 命名空间 |
data-id | string | 规则文件的 Data ID(如 auth-flow.json) |
data-type | string | 数据格式:json / xml |
group-id | string | 配置分组 |
username | string | Nacos 用户名 |
password | string | Nacos 密码 |
rule-type | string | 规则类型:flow / degrade / system / authority / param-flow |
# 示例
spring:
cloud:
sentinel:
# 饥饿加载,启动时初始化
eager: true
# 不统一上下文,对不同 URL 分别限流
web-context-unify: false
transport:
dashboard: sentinel:8972
filter:
enabled: true
datasource:
# 自定义数据源名称
db0:
nacos:
server-addr:${NACOS_CONFIG_ADDRESS:nacos:8848}
namespace: ${NACOS_NAMESPACE:public}
data-id: auth-flow.json
data-type: json
group-id: ${NACOS_GROUP:IOT_GROUP}
username: ${NACOS_USERNAME:nacos}
password: ${NACOS_PASSWORD:nacos}
# flow = 流控规则
rule-type: flow
⚠️ 注意:
web-context-unify设为false时,每个 URL 入口会创建独立的 Context,如果接口数量过多可能增加内存开销,请根据实际场景权衡。
# Sentinel 规则类型速查
rule-type | 含义 | 用途 |
|---|---|---|
flow | 流量控制 | QPS / 线程数限流 |
degrade | 熔断降级 | 慢调用比例、异常比例、异常数 |
system | 系统保护 | CPU 使用率、系统 Load 等 |
authority | 授权规则 | 黑白名单控制 |
param-flow | 热点参数 | 对某个参数值单独限流 |
# 6. 网络接口过滤(inetutils)
配置前缀:
spring.cloud.inetutils
控制服务注册时使用哪张网卡的 IP 地址。在 Docker / 多网卡环境下非常重要。
# 配置项
| 配置项 | 类型 | 说明 |
|---|---|---|
ignored-interfaces | list | 需要忽略的网络接口名称(支持正则) |
# 示例
spring:
cloud:
inetutils:
ignored-interfaces:
# 忽略 Docker 虚拟网卡
- docker0
# 忽略 veth 开头的虚拟网卡
- veth.*
⚠️ 重要: 在容器化部署环境中,Docker 会创建虚拟网卡(
docker0、veth*),若不忽略这些接口,服务可能注册虚拟网卡的 IP,导致其他服务无法访问。
# 完整配置总览
以下为 laokou-auth 模块中所有 spring.cloud 相关配置的完整汇总:
spring:
# Nacos 配置导入
config:
import:
- optional:nacos:laokou-auth.yaml?refreshEnabled=true&group=${NACOS_GROUP:IOT_GROUP}
cloud:
# ========== 负载均衡 ==========
loadbalancer:
nacos:
enabled: true
# ========== 网络接口过滤 ==========
inetutils:
ignored-interfaces:
- docker0
- veth.*
# ========== Sentinel 流量防护 ==========
sentinel:
eager: true
web-context-unify: false
transport:
dashboard: sentinel:8972
filter:
enabled: true
datasource:
db0:
nacos:
server-addr: @NACOS-CONFIG-ADDRESS@
namespace: @NACOS-NAMESPACE@
data-id: auth-flow.json
data-type: json
group-id: ${NACOS_GROUP:IOT_GROUP}
username: ${NACOS_USERNAME:nacos}
password: ${NACOS_PASSWORD:nacos}
rule-type: flow
# ========== Nacos 服务发现 ==========
nacos:
discovery:
enabled: true
server-addr: ${NACOS_DISCOVERY_ADDRESS:nacos:8848}
namespace: ${NACOS_NAMESPACE:public}
username: ${NACOS_USERNAME:nacos}
password: ${NACOS_PASSWORD:nacos}
group: ${NACOS_GROUP:IOT_GROUP}
secure: false
ephemeral: true
cluster-name: ${NACOS_CLUSTER_NAME:iot-cluster}
heart-beat:
enabled: true
heart-beat-interval: 10000
heart-beat-timeout: 30000
# ========== Nacos 配置中心 ==========
config:
enabled: true
server-addr: ${NACOS_CONFIG_ADDRESS:nacos:8848}
namespace: ${NACOS_NAMESPACE:public}
username: ${NACOS_USERNAME:nacos}
password: ${NACOS_PASSWORD:nacos}
cluster-name: ${NACOS_CLUSTER_NAME:iot-cluster}
file-extension: yaml
group: ${NACOS_GROUP:IOT_GROUP}
refresh-enabled: true
# 配置来源说明
| 文件 | 包含的 Spring Cloud 配置 |
|---|---|
application.yml | loadbalancer、inetutils、sentinel |
application-dev.yml | nacos.discovery、nacos.config、config.import |
📝 说明:
application.yml中的配置对所有环境生效;application-dev.yml仅在spring.profiles.active=dev时生效。通过 Profile 分离环境差异,主配置文件保持通用。
我是老寇,我们下次再见啦!