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成功进行配置的动态刷新

相关推荐
Ken_11153 小时前
SpringCloud系列(62)--Nacos之命名空间、分组和DataID三者之间的关系
spring cloud
Ken_11156 小时前
SpringCloud系列(63)--Nacos读取不同配置之DataID配置方案
spring cloud
Devin~Y11 小时前
从Spring Boot到Spring AI:音视频AIGC内容社区Java大厂面试三轮连环问(含Kafka/Redis/安全/可观测性答案)
java·spring boot·redis·spring cloud·kafka·spring security·resilience4j
qqty121714 小时前
springcloud springboot nacos版本对应
spring boot·spring·spring cloud
一个有温度的技术博主14 小时前
微服务技术选型:Dubbo、Spring Cloud与Spring Cloud Alibaba深度对比
spring cloud·微服务·dubbo
慕容卡卡15 小时前
大模型核心,MCP(模型上下文协议)和Session API
java·开发语言·人工智能·spring boot·spring cloud
一个有温度的技术博主1 天前
微服务4:Spring Cloud 微服务实战:如何实现跨服务数据组装?
spring cloud·微服务·架构
StackNoOverflow1 天前
SpringCloud的声明式服务调用 Feign 全面解析
后端·spring·spring cloud
地瓜伯伯1 天前
SpringBoot项目整合Elasticsearch启动失败的常见错误总结
spring boot·elasticsearch·spring cloud