当前位置: 首页 > news >正文

Nacos | 三种方式的配置中心,整合Springboot3.x + yaml文件完成 0错误 自动刷新(亲测无误)

目录

@Value+@RefreshScope

导入配置依赖

启动类 添加 @EnableDiscoveryClient

控制器

编写 yaml 文件

创建 Nacos Data Id

项目启动问题

 测试

@ConfigurationProperties 无感自动刷新

 导入配置依赖

启动类 添加 @EnableDiscoveryClient

控制器

Nacos DataID 模板映射

编写 yaml 文件

创建 Nacos Data Id

测试

NacosConfigManager

配置监听

启动类配置



@Value+@RefreshScope

导入配置依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

启动类 添加 @EnableDiscoveryClient

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;// 开启服务发现
@EnableDiscoveryClient
@SpringBootApplication
public class UserMainApplication {public static void main(String[] args) {SpringApplication.run(UserMainApplication.class, args);}
}

控制器

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
// 添加 @RefreshScope 注解,使得配置能够自动刷新
@RefreshScope
public class UserController {// 读取配置@Value("${users.timeout}")String usersTimeout;@Value("${users.auto-confirm}")String usersAutoConfirm;@GetMapping("/config")public String config() {return "users.timeout=" + usersTimeout + ",users.auto-confirm=" + usersAutoConfirm;}}

编写 yaml 文件


server:port: 8000
spring:# 这里是要导入的 Nacos DataId 的配置文件名称config:import:- nacos:service-users.yaml# 配置应用名称application:name: service-users# 配置注册中心地址与配置的IPcloud:nacos:discovery:server-addr: 127.0.0.1:8848config:server-addr: 127.0.0.1:8848

创建 Nacos Data Id

users: timeout: 30minauto-confirm: 7d

项目启动问题

解决方法是添加一个import-check


server:port: 8000
spring:# 这里是要导入的 Nacos DataId 的配置文件名称config:import:- nacos:service-users.yaml# 配置应用名称application:name: service-users# 配置注册中心地址与配置的IPcloud:nacos:discovery:server-addr: 127.0.0.1:8848config:server-addr: 127.0.0.1:8848# 这里添加一个就行了import-check:enabled: false

 测试

http://localhost:8000/config

@ConfigurationProperties 无感自动刷新

 导入配置依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

启动类 添加 @EnableDiscoveryClient

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;// 开启服务发现
@EnableDiscoveryClient
@SpringBootApplication
public class UserMainApplication {public static void main(String[] args) {SpringApplication.run(UserMainApplication.class, args);}
}

控制器

import com.jkglxt.users.yaml.Users;
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {private UserServiceImpl userService;private Users users;@Autowiredpublic UserController(UserServiceImpl userService, Users users) {this.userService = userService;this.users = users;}@GetMapping("/config")public String config() {return "users.timeout=" + users.getTimeout() + ",users.auto-confirm=" + users.getAutoConfirm();}
}

Nacos DataID 模板映射

创建 yaml.Users类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Component // 这里必须使用@Component注解,否则无法自动装配
@ConfigurationProperties(prefix = "users") // 配置批量绑定,这里的 users 则是Date ID 的前缀
public class Users {// 读取配置String timeout;String autoConfirm;}

编写 yaml 文件


server:port: 8000
spring:# 这里是要导入的 Nacos DataId 的配置文件名称config:import:- nacos:service-users.yaml# 配置应用名称application:name: service-users# 配置注册中心地址与配置的IPcloud:nacos:discovery:server-addr: 127.0.0.1:8848config:server-addr: 127.0.0.1:8848

创建 Nacos Data Id

测试

http://localhost:8000/config

NacosConfigManager

配置监听

启动类配置

import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;import java.util.concurrent.Executor;
import java.util.concurrent.Executors;// 开启服务发现
@EnableDiscoveryClient
@SpringBootApplication
public class UserMainApplication {public static void main(String[] args) {SpringApplication.run(UserMainApplication.class, args);}// 监听Nacos的配置变化@BeanApplicationRunner applicationListener(NacosConfigManager nacosConfigManager) {return args -> {ConfigService configService = nacosConfigManager.getConfigService();configService.addListener("service-users.yaml","DEFAULT_GROUP", new Listener() {@Overridepublic Executor getExecutor() {return Executors.newFixedThreadPool(4);}@Overridepublic void receiveConfigInfo(String configInfo) {System.out.println("Nacos配置变化:" + configInfo);}});System.out.println("Nacos配置变化监听");};};}
Nacos配置变化监听
2025-05-30T00:38:41.476+08:00  INFO 30312 --- [service-users] [           main] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Listening config: dataId=service-users.yaml, group=DEFAULT_GROUP
2025-05-30T00:38:51.491+08:00  INFO 30312 --- [service-users] [listener.task-0] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Receive Nacos config change: dataId=service-users.yaml, group=DEFAULT_GROUP
Nacos配置变化:users: timeout: 300minauto-confirm: 70d
2025-05-30T00:38:51.535+08:00  INFO 30312 --- [service-users] [listener.task-0] c.a.c.n.c.NacosConfigDataLoader          : [Nacos Config] Load config[dataId=service-users.yaml, group=DEFAULT_GROUP] success
2025-05-30T00:38:51.685+08:00  INFO 30312 --- [service-users] [listener.task-0] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [users.auto-confirm, users.timeout]
2025-05-30T00:39:00.870+08:00  INFO 30312 --- [service-users] [listener.task-0] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Receive Nacos config change: dataId=service-users.yaml, group=DEFAULT_GROUP
Nacos配置变化:users: timeout: 30minauto-confirm: 7d
2025-05-30T00:39:00.911+08:00  INFO 30312 --- [service-users] [listener.task-0] c.a.c.n.c.NacosConfigDataLoader          : [Nacos Config] Load config[dataId=service-users.yaml, group=DEFAULT_GROUP] success
2025-05-30T00:39:01.048+08:00  INFO 30312 --- [service-users] [listener.task-0] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [users.auto-confirm, users.timeout]


-- Thank you --

相关文章:

  • 【C语言】函数指针及其应用
  • C++中单例模式详解
  • 使用 C/C++ 和 OpenCV 调用摄像头
  • Codeforces Round 1025 (Div. 2)
  • C++哈希
  • 数据结构 --- 顺序表
  • grid网格布局
  • Linux基础开发工具
  • 委托从入门到入土
  • Vscode 解决 #include <> 找不到的问题
  • Android 异步编程中协程的完整实战示例
  • CppCon 2014 学习第1天:An SQL library worthy of modern C++
  • 安全访问 std::tuple 的容错方法及气象领域应用
  • 数据库中常见的锁机制详解
  • 包会!在Linux上用bcc运行第一个eBPF程序
  • 安装 Node.js 和配置 cnpm 镜像源
  • 详细到用手撕transformer上半部分
  • qt结构化绑定的重大缺陷:只能创建局部变量
  • Vue-Router 动态路由的使用和实现原理
  • 【畅想7s 快捷ICON】在手机桌面添加一张图片的快捷
  • 给公司做企业网站/软文推广发稿
  • 北京给网站做系统的公司名称/百度收录权重
  • 给家乡做网站/百度快照优化的优势是什么
  • 自己电脑做网站模板/网站运营主要做什么工作
  • 专业外贸网站制作公司/seo网络营销的技术
  • 网站群系统建设思路/企业建网站一般要多少钱