最后
如果觉得本文对你有帮助的话,不妨给我点个赞,关注一下吧!
private String age;
@RequestMapping(“/test”)
public R test() {
return R.ok().put(“name”, name).put(“age”, age);
}
- 启动服务器后访问http://localhost:7000/coupon/coupon/test可以正常获取到值
-
**弊端:**修改起来非常繁琐,需要修改配置文件中的内容,重新上线。如果部署多台机器,非常麻烦。
-
使用配置中心控制配置
在项目启动的时候可以看到,会加载nacos中名为gulimall-coupon.properties
的配置,所以只要配置中心中存在该文件,即可通过配置中心进行访问。
- 打开nacos配置中心,选择配置列表
- 选择右上角加号,新增配置
- 创建
gulimall-coupon.properties
配置,并填写配置内容后发布
-
删除项目中application.properties中的配置后重启项目访问http://localhost:7000/coupon/coupon/test仍可以获取数据
-
在controller上,添加
@RefreshScope
注解,即可实现动态刷新。
- 如果想要修改,在nacos配置列表中对配置进行编辑即可。
访问地址也可动态实时刷新,获取最新数据。
Nacos Config数据结构
Nacos Config 主要通过 dataId 和 group 来唯一确定一条配置。
Nacos Client 从 Nacos Server 端获取数据时,调用的是此接口 ConfigService.getConfig(String dataId, String group, long timeoutMs)。
Spring Cloud 应用获取数据
dataID:
在 Nacos Config Starter 中,dataId 的拼接格式如下
- ${prefix} - ${spring.profiles.active} . ${file-extension} prefix 默认为 spring.application.name
的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。
- spring.profiles.active 即为当前环境对应的 profile
注意,当 activeprofile 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成
p r e f i x . {prefix}. prefix.{file-extension}
file-extension 为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension 来配置。 目前只支持 properties 类型。
Group:
Group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 配置。
- 在应用中使用@Value 和@RefreshScope
完成上述两步后,应用会从 Nacos Config 中获取相应的配置,并添加在 Spring Environment 的 PropertySources 中 。 这 里 我 们 使 用 @Value 注 解 来 将 对 应 的 配 置 注 入 到SampleController 的 userName 和 age 字段,并添加 @RefreshScope 打开动态刷新功能
@RefreshScope
class SampleController {
@Value(“${user.name}”)
String userName;
@Value(“${user.age}”)
int age;
}
- 如何使用Nacos作为配置中心统一管理配置
-
引入
spring-cloud-starter-alibaba-nacos-config
依赖 -
创建
bootstrap.properties
并配置应用名和Nacos配置中心地址(前提:启动Nacos服务器) -
需要给配置中心默认添加一个叫数据集(Data Id)gulimall-coupon.properties。
默认规则:应用名.properties
-
给应用名.properties添加配置
-
动态获取配置
使用注解@RefreshScope
:动态获取并刷新配置
使用注解@Value("${配置项的名}")
:获取配置
如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。
- 进阶
- 核心概念
| 名称 | 解释 |
| — | — |
| 命名空间 | 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 |
| 配置集 | 一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配 置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。 |
| 配置集 ID | Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。 |
| 配置分组 | Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和MQ_topic 配置。 |
- 命名空间:配置隔离
默认:public(保留空间);默认新增的所有配置都在public空间。
举例:
- 利用命名空间做环境隔离
注意:在bootstrap.properties中配置使用哪一个命名空间,使用命名空间id进行标识
- 开发、测试、生产环境均有不同配置。可以新建不同命名空间。
- 可以在不同命名空间下创建相同配置
gulimall-coupon.properties
- 服务启动后,默认会寻找public命名空间下的配置。可以在
bootstrap.properties
中配置使用不同命名空间
spring.cloud.nacos.config.namespace=命名空间id
- 服务重启后,可以访问到dev中的配置
- 基于每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的配置。