SpringCloud系列(61)--Nacos之服务配置中心的介绍与使用

前言:之前几节的内容是关于Nacos如何作为服务注册中心去使用的教程,而本节内容则是关于Nacos如何作为服务配置中心去使用

1、创建一个服务提供者模块,命名为cloudalibaba-config-nacos-client3377
(1)在父工程下新建模块
(2)选择模块的项目类型为Maven并选择模块要使用的JDK版本
(3)填写子模块的名称,然后点完成即可完成创建

效果图:

(4)修改cloudalibaba-config-nacos-client3377子模块的pom.xml文件,然后reolad一下,下载依赖

例:

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">
    <parent>
        <artifactId>springcloud01</artifactId>
        <groupId>com.ken.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-config-nacos-client3377</artifactId>

    <dependencies>
        <!-- nacos config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--springcloud alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--以下依赖都没写版本号,没写版本号的情况下会引用父项目的版本-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--lombok插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
2、为子模块添加名为bootstrap的yml配置文件

注:application.yml是用户级资源配置项,bootstrap.yml是系统级,bootstrap.yml优先级更高,Spring Cloud会创建一个BootstrapContext,作为Spring应用的Application Context的父上下文。初始化的时候,BootstrapContext负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的Environment。Bootstrap属性有高优先级,默认情况下,它们不会被本地配置覆盖。Bootstrap context和Application Context有着不同的约定,所以新增了一个bootstrap.yml文件,保证`Bootstrap Context和Application Context配置的分离。要将Client模块下的application.yml文件改为bootstrap.yml,这是很关键的,因为bootstrap.yml是比application.yml先加载的。bootstrap.yml优先级高于application.yml

Nacos同SpringCloud Config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。

效果图:

3、修改bootstrap.yml文件配置
XML 复制代码
#nacos配置
server:
  port: 3377
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        #Nacos作为服务注册中心的地址
        server-addr: localhost:8848
      config:
        #Nacos作为配置中心的地址
        server-addr: localhost:8848
        #指定yaml格式的配置
        file-extension: yaml

# ${spring.application.name}-$[spring.profile.active}.${spring.cLoud.nacos.config.file-extension}
4、为子模块添加名为application的yml配置文件(注:yml是官方推荐的配置文件格式,最好使用yml文件而不是properties文件)

效果图:

5、修改application.yml文件配置
XML 复制代码
spring:
  profiles:
    #表示的开发环境
    active: dev

bootstrap.yml的spring.cloud.nacos.config.file-extension和application.yml的spring.profiles.active组合起来表示cloudalibaba-config-nacos-client3377从配置中心8848里面拉取一个名为dev.yaml的配置文件


6、为cloudalibaba-config-nacos-client3377子模块新建一个主启动类,类名输入com.ken.springcloud.NacosConfigClientMain3377,然后创建即可

效果图:

7、编写cloudalibaba-config-nacos-client3377子模块的主启动类
java 复制代码
package com.ken.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {

    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }

}
8、新建一个名为controller的包,然后在controller包里新建一个名为ConfigClientController的控制类,类名输入controller.ConfigClientController,然后创建即可

效果图:

9、编写ConfigClientController类
java 复制代码
package com.ken.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
//加上这个注解后Nacos支持配置动态刷新
@RefreshScope
public class ConfigClientController {

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

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }

}

关于@RefreshScope注解的使用在SpringCloud Config客户端实现配置动态刷新时使用过,同样是通过Spring Cloud的原生注解@RefreshScope实现配置自动更新的
https://blog.csdn.net/m0_64284147/article/details/139456120


10、新增配置
(1)先了解配置命名规则

到Nacos官方文档了解配置的名称规则:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

截图的大意是配置文件的名称dataId(如下图)的命名格式为{prefix}-{spring.profiles.active}.{file-extension},而prefix取值spring.application.name,spring.profiles.active有值就取这个配置的值,没值dataId的格式就变为{prefix}.${file-extension},file-exetension取值spring.cloud.nacos.config.file-extension

总结:

(2)根据dataId的格式取得配置文件的名称

prefix取值spring.application.name,而我们的spring.application.name值为nacos-config-client,所以prefix的值为nacos-config-client

spring.profiles.active取值dev

file-extension取值spring.cloud.nacos.config.file-extension,而我们的spring.cloud.nacos.config.file-extension值为yaml,所以file-extension的值为yaml

综上所述,根据{prefix}-{spring.profiles.active}.${file-extension}这个格式,我们的dataId名为nacos-config-client-dev.yaml

(3)进入Nacos的配置列表里新增配置
(4)填写配置的内容,如何发布

效果图:

(5)配置管理功能简介

注:

Nacos上新建的配置文件的后缀要与spring.cloud.nacos.config.file-extension的参数保持一致


11、启动cloudalibaba-config-nacos-client3377服务

效果图:

12、在浏览器地址栏里输入http://localhost:3377/config/info测试是否能成功从Nacos上取得配置内容

效果图:

由图可知读取配置成功

13、测试Nacos的动态刷新
(1)进入Nacos点击编辑,编辑nacos-config-client-dev.yaml文件
(2)修改nacos-config-client-dev.yaml文件的内容,然后重新发布

效果图:

(3)重新在浏览器地址栏里输入http://localhost:3377/config/info

效果图:

由图可知Nacos成功进行配置的动态刷新

相关推荐
行百里er1 天前
Spring Insight 里上报 Span 为什么用 JDK HttpClient 而不是 RestTemplate
spring boot·spring cloud·监控
陈皮波比茶1 天前
SpringCloudAlibaba
java·spring cloud·微服务
欢迎来到祖安!1 天前
企业微信 API 接口能力介绍:支持消息收发、图片发送、表情互动、联系人管理等多场景应用
java·前端·数据仓库·spring cloud·企业微信
行百里er2 天前
BlockingQueue:异步批量上报
spring boot·spring cloud·监控
wno7043 天前
Spring Cloud Hystrix Dashboard仪表盘
spring·spring cloud·hystrix
BUG指挥官3 天前
Redis已接入AI
数据库·人工智能·spring boot·redis·spring cloud
wno7044 天前
Spring Cloud Hystrix服务容错
spring·spring cloud·hystrix
苏渡苇4 天前
Spring Insight 里上报 Span 为什么用 JDK HttpClient 而不是 RestTemplate
java·后端·spring·spring cloud·springboot·性能监控
YOU OU5 天前
Spring Cloud Consul
spring cloud·consul·java-consul
重生之我是Java开发战士5 天前
【Spring Cloud】Eureka服务注册发现与LoadBalancer负载均衡
spring cloud·eureka·负载均衡