SpringCloud Alibaba - Nacos 作为配置中心 & 读取Yaml配置信息

    科技2022-07-11  99

    过本系列的前篇文章:

    《SpringCloud Alibaba - Nacos 作为配置中心 & 读取Properties配置信息》

    在之前文章中我们学习到了SpringCloud Alibaba读取Nacos Config内定义的properties类型的配置文件信息,并且使用Nacos Console进行修改配置信息后可以在应用程序内实时更新。

    本章目标

    Nacos Config所支持的配置文件类型既然有多种,那我们该怎么配置才能读取不同的配置类型的内容呢?

    快速入门

    我们还是先来通过Nacos Console来添加本章所使用的配置信息,要注意配置的后缀名改为yaml。

    Nacos Server

    需要在本地安装Nacos Server才能完成本章的内容讲解,具体的安装步骤访问Nacos 官方文档

    创建配置

    配置信息如下所示:

    创建应用

    我们在Nacos Console已经添加了本章所使用的Yaml类型的配置信息,下面通过Idea开发工具创建一个SpringBoot项目,并添加SpringCloud Alibaba、SpringCloud版本的依赖,pom.xml配置文件内容如下所示:

     

    //...

    <properties>

    <java.version>1.8</java.version>

    <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>

    <spring-cloud-alibaba.version>0.2.1.RELEASE</spring-cloud-alibaba.version>

    </properties>

     

    <dependencies>

    <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

    <!--alibaba nacos config-->

    <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

    </dependency>

    </dependencies>

     

    <dependencyManagement>

    <dependencies>

    <!--SpringCloud-->

    <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-dependencies</artifactId>

    <version>${spring-cloud.version}</version>

    <type>pom</type>

    <scope>import</scope>

    </dependency>

    <!--SpringCloud Alibaba-->

    <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-alibaba-dependencies</artifactId>

    <version>${spring-cloud-alibaba.version}</version>

    <type>pom</type>

    <scope>import</scope>

    </dependency>

    </dependencies>

    </dependencyManagement>

    //...

    配置文件扩展名

    在之前讲到过默认的配置文件扩展名为properties,既然我们本章是读取的yaml类型的文件,那肯定需要修改这个配置参数,application.yml配置文件如下所示:

     

    spring:

    application:

    name: hengboy-spring-cloud

    # nacos config

    cloud:

    nacos:

    config:

    server-addr: 127.0.0.1:8848

    # 配置文件后缀名为yaml

    file-extension: yaml

    通过spring.cloud.nacos.config.file-extension参数进行修改默认的Nacos Config所匹配的默认文件扩展名。

    在上面的配置文件内要注意的时,hengboy-spring-cloud要与Nacos Console内添加的配置data-id前部分匹配,也就是匹配:hengboy-spring-cloud.yaml。

    读取配置

    下面我们通过简单的几个步骤来读取我们配置的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内部提供,用于配置热加载。

    第四步:运行测试

    启动应用程序,我们通过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

    代码示例

    本章代码在源码的名称为:spring-cloud-alibaba-nacos-config-yaml,在SpringCloud-Alibaba/Nacos-Config目录下。

    Github:https://github.com/hengboy/spring-cloud-chapterGitee:https://gitee.com/hengboy/spring-cloud-chapter

    开源信息

    MicroJob micro-job是一款分布式任务调度执行框架,用于集群环境负载均衡条件下的任务分发以及任务消费

    任务消费者节点定义任务 & 任务自动上报 任务调度器自动根据负载均衡策略来选择不同的消费者节点进行任务消费

    Processed: 0.014, SQL: 8