nacos 笔记2-配置中心

发布于:2025-02-11 ⋅ 阅读:(24) ⋅ 点赞:(0)

本文属于b站图灵课堂springcloud笔记系列。讲得好还不要钱,值得推荐。

一 多环境profile 配置

Nacos profile 是用来在 Nacos 中区分不同环境的配置,比如开发环境、测试环境、生产环境等。在 Nacos 中,可以为不同的 profile 配置不同的配置信息。

1测试准备

controller增加一个测试方法,增加一个配置属性,我举例就用了env字符串

    @Value("${env}")
    private String env;

    @GetMapping(value = "/get1")
    public String test(@RequestParam("userId") String userId) {
        return "服务提供者:" + userId+",env:"+env;
    }

修改application.yml

增加一行配置:env: local

重启服务后,就是本地的值。

2 profile 配置

nacos 新增两个配置文件,用于区分环境

dev就配置了dev,prod 配置了prod.

修改application.yml,新增spring.profiles.active

spring:
  application:
    name: tlmall-order01
  profiles:
    active: dev
  • spring.profiles.active即为当前环境对应的profile。测试接口

通常会在启动脚本加入参数,-Dspring.profiles.active=prod ,这样就能灵活根据环境进行切换。

二 namespace隔离

官网对于namespace介绍

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

可以测试下。nacos新建namespce:

nacos 配置管理导入对应的dataID

里面的值加以区分改为bohu-prod

修改application.yml,增加namespce选项。

重启后测试。可见 namespace 配置生效了。

三 业务GROUP隔离

   Nacos提供了group进行隔离,官方介绍:

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

就是常用的数据库、mq这种公共组件,可以针对不同服务进行不同配置。

新建两个yml,其中dataid 相同,GROUP 不同。

其中bohu_group配置了66,defalut配置了50

 @Value("${min-idle}")
    private String minIdle;

    @GetMapping(value = "/getMinIdle")
    public String getMinIdle() {
        return minIdle;
    }

修改配置文件:application.yml,指定group, 引入新的配置文件 

四 动态刷新:

spring-cloud-starter-alibaba-nacos-config 支持动态刷新,会把值推送到Environment。

可|以从Environment获取到配置中心更改的值,但是OrderController(Bean对象)中@Value修饰的值没有变化

使用注解:@RefreshScope

注意:使用不当可能会导致@Scheduled定时任务失效。

原因分析:

@RefreshScope修饰的bean的属性发生变更后,会从缓存中清除。此时没有这个bean,定时任务当然也就不生效了。

解决办法:

老师推荐使用 RefreshScopeRefreshedEvent 事件监听事件

XXcontroller implements ApplicationListener<RefreshScopeRefreshedEvent>

还可以使用Environment获取。或者想办法吧定时任务跟配置拆出来。


网站公告

今日签到

点亮在社区的每一天
去签到