SpringBoot项目如何从Nacos配置中心动态读取配置信息

SpringBoot项目如何从Nacos配置中心动态读取配置信息

1、项目中引入依赖

 要从nacos中读取配置,需要引入相关依赖。

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

 

2、检查配置文件

首先要保证项目中的bootstrap.yml配置文件存在,且里面的配置正确。

注意:这里我使用的为.yml格式配置文件。且指定 spring.profiles.active=dev

如果你也使用的.yml格式,一定要在bootstrap.yml中指明 file-extension: yml

 

#bootstrap.yml
spring:
  application:
    name: application-test
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
         #没有使用命名空间的话,可以不用配置,默认为public
        namespace: 5bfce986-3911-4699-a972-9e664841821b

 

 

3、确认nacos中配置文件名规则

${prefix}-${spring.profile.active}.${file-extension}

 

 

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

  • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符-也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}

  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持properties 和yml 类型。

 

4、读取配置

下面我们通过简单的几个步骤来读取我们配置的yaml配置内容。

第一步:创建一个配置读取的Controller

创建一个名为ConfigController的配置查询控制器,并且类上配置@RequestMapping("/config")

 

第二步:通过@Value注解读取配置信息

我们在之前章节通过applicationContext#getEnvironment#getProperty方法可以直接获取对应的Nacos Config的配置信息,当然SpringCloud Alibaba也同样支持通过@Value注解来获取配置信息,如下所示:

@RestController
@RequestMapping(value = "/config")
@RefreshScope
public class ConfigController {
    /**
     * 读取hengboy.name配置信息
     */
    @Value(value = "${hengboy.name:}")
    private String userName;
    /**
     * 读取hengboy.age配置信息
     */
    @Value(value = "${hengboy.age:}")
    private String userAge;
 
    /**
     * 获取配置内容
     *
     * @return
     */
    @RequestMapping(value = "/get")
    public String getConfig() {
        return userName + ":" + userAge;
    }
 
}

解释:${hengboy.name:}表示需要从全局的配置内容中读取hengboy.name的配置信息,如果没有找到则使用 冒号(:) 后的内容,当然这里我们没有添加任何的默认值,如果没有配置则为空字符串。

 

第三步:通过@RefreshScope注解实时刷新配置信息

我们在ConfigController控制器上添加了注解@RefreshScope主要目的是来实时同步通过Nacos Console修改的配置内容。

@RefreshScope注解是SpringCloud内部提供,在需要配置热更新的配置bean上加springCloud的动态加载配置。

 

@RefreshScope可用在类上也可用在方法上,当用在方法上时,如果是想加载配置bean中使用前缀注入的属性时(@ConfigurationProperties(prefix = “web.test”)),任然会不能实时的动态更新,配置bean中使用@Value注入的属性可实现动态更新。

第四步:运行测试

启动应用程序,我们通过curl http://localhost:8080/config/get可以获取我们在Nacos Console添加的配置内容:admin:25

 

第五步:实时更新测试

通过Nacos Console我们修改下两个参数的内容并且重新发布配置信息

hengboy.name : admin -> admin-change-after
hegnboy.age : 25 -> 30

再次通过curl http://localhost:8080/config/get命令访问,我们已经可以得到更新后的配置内容:admin-change-after:30

 

posted @ 2021-04-07 16:32  gaopengpy  阅读(13454)  评论(0编辑  收藏  举报