获取Nacos注册中心中的配置文件

1.Nacos配置中心

1.1.概述

在Spring官方通过Spring Cloud Config作为统一配置文件管理中心,其实我们使用过后就会发现Spring Cloud Config使用起来总归比较麻烦。Nacos作为Spring Cloud Alibaba的一个重要组件,它不仅可以用作服务注册与发现,也可以用来替代Spring Cloud Config作为统一配置文件管理,而且它的使用更为简单和人性化。

1.2.Nacos添加配置 

关于怎么打开控制台请参考: SpringCloud Alibaba微服务01——Nacos注册中心-CSDN博客

第一步:打开Nacos监控面板 - 进入配置列表 -点击 “+” 图标添加配置 如下:

第二步:填写Data ID,选择YAML,编辑配置文件内容

这里定义了一个名字为application-user-dev.yaml的配置,使用的是YAML格式。

  • Data ID : 非常重要,可以看做是配置的文件的名字,在程序中拉取配置文件的时候需要指定Data ID。

  • Group : 分组,默认是 DEFAULT_GROUP , 可以针对不同的项目指定不同的配置组。

2.客户端接入配置中心(重要)

2.1.导入依赖

修改工程 video-service ,添加配置中心依赖nacos-config,引入如下依赖:

        <!-- 配置中心客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- 让SpringCloud支持bootstrap名称的配置文件 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.0</version>
        </dependency>
​
2.2.编写Controller

下面的Controller用来做配置刷新测试,temp.notify对应了配置文件中的配置项目。@RefreshScope注解是用来做配置自动刷新。那么当我们修改了Nacos中的配置文件,Controller中读取到的配置temp.notify将会自动变化。

@RefreshScope  //刷新配置
@RestController
public class UserController {
​
    @Value("${temp.notify}")
    private String notify;
​
    @GetMapping("/user/{id}")
    public String getById(@PathVariable Long id){
        return id + "===" + notify;
    }
}
2.3.修改yml配置

注意,将video-service项目中的配置文件重命名为bootstrap.yml,然后增加如下内容:

spring:
  profiles:
    active: dev  # 启用开发环境
  application:
    name: video-service   # 应用名称
  datasource:
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///videoblog-video?useUnicode=true&characterEncoding=utf8
    type: com.alibaba.druid.pool.DruidDataSource  # 使用Druid数据源
    druid: # 配置Druid数据库连接池
      initial-size: 10  # 初始连接数
      min-idle: 10  # 最小连接数
      max-active: 50  # 最大连接数
  cloud:
    nacos:
      discovery:
        username: nacos   # Nacos的账号
        password: nacos   # Nacos的密码
        server-addr: 192.168.10.111:8848   # Nacos服务器地址
        namespace: public   # 注册到 nacos 的指定 namespace,默认为public
      config:
        username: nacos   # Nacos的账号
        password: nacos   # Nacos的密码
        server-addr: 192.168.10.111:8848 #配置中心
        file-extension: yaml #配置文件格式
        prefix: application-user #配置前缀 ,默认使用sring.application.name
        group: DEFAULT_GROUP #默认分组
​
server:
  port: 8001
​
# 配置MyBatis
mybatis:
  type-aliases-package: com.dw.domain   # 为指定包下的实体类起别名
  mapper-locations: classpath:mappers/*xml    # 配置mapper文件所在的路径
  configuration:
    map-underscore-to-camel-case: true    # 开启下划线驼峰映射
    
#如何查找配置文件:application-user + dev + yaml=application-user-dev.yaml 正好和Nacos配置的DataId一致

提示:客户端是如何从Nacos中找到配置文件的呢?

  • spring.cloud.nacos.config.server-addr :配置了Nacos的地址

  • spring.cloud.nacos.config.file-extension:指定了配置文件的格式为YAML,默认是properties,

  • spring.cloud.nacos.config.prefix:配置前缀,如果不配置前缀默认会把 服务名即spring.application.name的值作为前缀

  • spring.cloud.nacos.config.group :分组名,默认是DEFAULT_GROUP对应了Nacos配置中的Group

  • spring.profiles.active:配置了环境为dev .该配置可以实现多配置多环境管理

根据如上配置,那么config客户端会将:前缀+环境+后缀 拼接成的文件名“application-user-dev.yaml” 去Nacos上查找是否有对应Data ID的配置文件。

2.4.测试

启动Nacos,启动 video-service 工程 , 修改Nacos中的配置文件内容,然后访问 http://localhost:8001/user/11 ,观察 “notify”的值会发生变化。

2.5.注意细节
  • 云端配置文件的后缀应该是 yaml而不是yml

  • 客户端配置需要指定:spring.profiles.active=dev 环境名

  • 客户端配置 :前缀 + 环境名 + 后缀应该和云端配置文件的DataId一致

3.命名空间

命名空间可以用来隔离不同项目的配置文件,在Nacos中配置了命名空间后,那么Java客户端需要指定命名空间后才能拉取到该命名空间下的配置文件。

3.1.创建命名空间

修改Nacos,添加命名空间如下:

这里建立了一个名字为“test”的命名空间,点击确定,然后你需要关注一下命名空间的ID,这个是需要在Java客户端进行配置的。如下:

3.2.在命名空间创建配置

进入配置列表 ,切换到新建立的命名空间“test”,然后创建配置,如下:

需要注意后缀是yaml

需要注意:这里的配置文件名也叫 application-user-dev.yaml,但是他是属于 “test”这个命名空间的 , 我们之前在 默认的“public”命名空间中也有一个同名的配置。

3.3.客户端配置

这里需要指定一下从哪个命名空间拉取配置:

spring:
  profiles:
    active: dev  # 启用开发环境
  application:
    name: video-service   # 应用名称
  datasource:
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///videoblog-video?useUnicode=true&characterEncoding=utf8
    type: com.alibaba.druid.pool.DruidDataSource  # 使用Druid数据源
    druid: # 配置Druid数据库连接池
      initial-size: 10  # 初始连接数
      min-idle: 10  # 最小连接数
      max-active: 50  # 最大连接数
  cloud:
    nacos:
      discovery:
        username: nacos   # Nacos的账号
        password: nacos   # Nacos的密码
        server-addr: 192.168.10.111:8848   # Nacos服务器地址
        namespace: public   # 注册到 nacos 的指定 namespace,默认为public
      config:
        username: nacos   # Nacos的账号
        password: nacos   # Nacos的密码
        server-addr: 192.168.10.111:8848 #配置中心
        file-extension: yaml #配置文件格式
        prefix: application-user #配置前缀 ,默认使用sring.application.name
        group: DEFAULT_GROUP #默认分组
        namespace: 1b2e479d-cd04-49d9-8bcc-6a325ac2aa61 #命名空间的id
​
server:
  port: 8001
​
# 配置MyBatis
mybatis:
  type-aliases-package: com.dw.domain   # 为指定包下的实体类起别名
  mapper-locations: classpath:mappers/*xml    # 配置mapper文件所在的路径
  configuration:
    map-underscore-to-camel-case: true    # 开启下划线驼峰映射

注意:这里的namespace对应了 Nacos中“test”这个命名空间的ID,意思是从“test”这个命名空间去找 application-user-dev.yaml的配置文件。

3.4.启动测试

启动Nacos,启动 springcloudalibaba-user-server-1010 工程 , 修改Nacos中的配置文件内容,然后访问 http://localhost:1010/user/11 ,观察控制台打印的 “notify”的值

4.扩展需求

4.1.如何自定义Data ID

支持自定义扩展的 Data Id 配置 :Nacos config · alibaba/spring-cloud-alibaba Wiki · GitHub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值