Nacos作为配置中心使用

315 阅读2分钟

pom.xml 引入 Nacos Config Starter

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

bootstrap.properties中配置 Nacos Config 元数据

bootstrap.properties在springboot中是优先于Application.yml的。会覆盖项目中gulimall-coupon.properties的属性值。

bootstrap.properties

spring:
  application:
    name: gulimall-coupon

  cloud:
    nacos:
      config:
        server-addr: xxx.xxx.xxx.xx:8848

Application.yml添加属性值

Application.yml

coupon:
  user:
    name: 唐1
    age: 28

编写测试接口

@RestController
public class ConfigTestController {

    @Value("${coupon.user.name}")
    private String name;
    @Value("${coupon.user.age}")
    private int age;

    @RequestMapping("/testConfig")
    public R testConfig() {
        return R.ok().put("name", name).put("age", age);
    }

}

nacos配置中心 添加 数据集

group_id=gulimall-coupon.properties(应用名.properties)

image.png

添加属性

coupon.user.name=唐2
coupon.user.age=29

测试

image.png

但是nacos修改配置文件,实时发布发现不能更新属性值。

在controller类添加@RefreshScope注解(动态刷新配置),即可。

总结

  • 引入pom依赖
  • 创建bootstrap.properties
  • 配置中心添加数据集
  • 动态获取配置@RefreshScope @Value
  • 如果配置中心与当前应用的配置文件都配置了相同的项,优先使用配置中心的配置

名称空间

命名空间:用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的 配置。Namespace的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

Namespace设置:

spring:
  application:
    name: gulimall-coupon

  cloud:
    nacos:
      config:
        server-addr: xxx.xxx.xxx.xx:8848
        namespace: 0fea795c-cabd-4d0b-9f8d-a419823c1eeb

配置分组

配置分组: Nacos中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 dev 或 prod)对配置集进行分组,从而区分 Data ID相同的配置集。当您在Nacos上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP。

每个微服务创建自己的 namespace 进行隔离,group 来区分 dev,beta,prod 等环境。

image.png

加载多配置

springboot默认的配置文件是:服务名.properties

也可以在默认的基础上添加额外的配置文件,比如可以将数据库信息,中间件信息等放到不同的配置文件里,通过在bootstrap.yml添加如下配置

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=31568de9-fa28-41c9-b0bd-c754ce319ed4
spring.cloud.nacos.config.ext-config[0].data-id=gulimall-datasource.yml
spring.cloud.nacos.config.ext-config[0].refresh=false
spring.cloud.nacos.config.ext-config[0].group=dev