前言:之前几节的内容是关于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成功进行配置的动态刷新
