乐趣区

Nacos四SpringCloud项目中接入Nacos作为配置中心

前言

通过前两篇文章:

  • Nacos(二):Nacos 与 OpenFeign 的对接使用
  • Nacos(三):SpringCloud 项目中接入 Nacos 作为注册中心

相信大家已经对 Nacos 作为注册中心的基本使用已经有了一定的了解。

然而,Nacos 远远不止于此,本文我们来看一下 Nacos 作为 配置中心 在 SpringCloud 中的使用
<!– more –>

我的环境

  • Windows10
  • JDK8
  • SpringCloud:Finchley.RELEASE
  • SpringBoot:2.0.4.RELEASE
  • spring-cloud-alibaba-dependencies:0.2.2.RELEASE
  • Nacos-server:1.0.1

本文的项目 Demo 继续沿用之前文章中的聚合工程Nacos, 若小伙伴还没有之前的环境,可至源码地址中下载

启动 Nacos-Server

进入 bin 文件夹(目录:nacos-server-1.0.1nacosbin),直接双击执行 startup.cmd 文件,这里具体的启动细节就不再说明

新建配置

在 Nacos-Server 中新建配置,其中 Data ID 它的定义规则是:${prefix}-${spring.profile.active}.${file-extension}

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。
  • spring.profile.active 即为当前环境对应的 profile,可以通过配置项 spring.profile.active 来配置。
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

注意:当 spring.profile.active 为空时,对应的连接符 – 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

这里我创建 Data Id 为 nacos-config.yml 的配置文件,其中 Group 为默认的DEFAULT_GROUP,配置文件的格式也相应的选择yaml,其内添加配置nacos.config=hello_nacos,如图所示

创建应用

1、在聚合工程 Nacos 下新建 Module,创建一个名为 nacos-config 的子工程,其 pom.xml 文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>Nacos</artifactId>
        <groupId>com.study.www</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.larscheng.www</groupId>
    <artifactId>nacos-config</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-config</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2、创建配置文件名为 bootstrap.yml, 注意是 ==bootstrap.xxx==,而不是application 或者其他。原因如下

Nacos 同 springcloud-config 一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot 中配置文件的加载是存在优先级顺序的,bootstrap 优先级高于 application

这里的配置文件类型可以根据个人习惯选择,我这里用的时 yml 类型,配置内容如下


spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml

可以看到必须可少的配置项 spring.application.name
spring.cloud.nacos.discovery.server-addr 指定注册中心的地址,如果你不需要注册该服务,也可以去掉该项,并删除 discovery 依赖
spring.cloud.nacos.config.server-addr指定配置中心的地址
file-extension指定配置中心中配置文件的格式

上面的配置是为了保证服务的正常注册和配置获取,以及配置 DataID 的正确性

3、创建对外接口来从 nacos 中读取配置,NacosConfigApplication.java 修改如下

@SpringBootApplication
@EnableDiscoveryClient
@RestController
@RefreshScope
public class NacosConfigApplication {public static void main(String[] args) {SpringApplication.run(NacosConfigApplication.class, args);
    }

    @Value("${nacos.config}")
    private String config;

    @RequestMapping("/getValue")
    public String getValue() {return config;}
}

其中通过 @Value 注解,去读取 key 为 nacosconfig 的配置的值,并通过 /getValue 接口返回。
加入 @RefreshScope 注解,可以使当前类下的配置支持动态更新。

到此代码部分的工作已经完成

启动测试

  1. 保证 Nacos-Server 已经启动
  2. 检查配置文件是否已经添加
  3. 启动 nacos-config 项目

启动成功后在 Nacos 控制台中可以看到我们注册的服务

此时调用接口进行测试 http://127.0.0.1:8080/getValue,可以看到返回结果

hello_nacos

此时说明已经成功读取到配置,下面我将 Nacos-Server 上的配置修改为hello_lars, 看看能否动态更新

调用接口进行测试 http://127.0.0.1:8080/getValue,返回结果如下

hello_lars

可以看到我通过 Nacos-server 的控制台进行配置的修改,客户端服务 nacos-config 也相应的进行热更新。

总结

通过上面的测试,可见 Nacos 做配置中心,在 SpringCloud 项目中,也可以做到无缝衔接,切换到 Nacos 可以说知识修改配置的问题,成本也很低

项目的其他配置不变,只需要指定配置中心地址,同时将配置文件外部管理。

本文源码:https://github.com/larscheng/…

参考

Nacos Spring Cloud

  • 文章作者: LarsCheng
  • 文章链接: 本文首发于个人博客:https://www.larscheng.com/nac…
  • 发布方式:OpenWrite 最懂你的科技自媒体管理平台
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LarsCheng’s Blog!
退出移动版