当前位置: 首页 > 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 --

http://www.xdnf.cn/news/704755.html

相关文章:

  • 单片机——keil5
  • WSL 开发环境搭建指南:Java 11 + 中间件全家桶安装实战
  • STM32开发全解析:从环境搭建到项目实战的技术文档撰写指南
  • 代谢组数据分析(二十五):代谢组与蛋白质组数据分析的异同
  • day13 leetcode-hot100-23(链表2)
  • xLSTM技术介绍
  • 技术文档写作大纲
  • JWT 不对外,Session ID 对外:构建安全可控的微服务认证架构
  • jenkins集成gitlab实现自动构建
  • 力扣-最长回文子串
  • 【课堂笔记】EM算法
  • stm32cube ide如何将工具链替换成arm-none-eabi-gcc
  • 零基础设计模式——结构型模式 - 代理模式
  • 安装flash-attention失败的终极解决方案(WINDOWS环境)
  • 按照状态实现自定义排序的方法
  • 机器学习数据降维方法
  • Apache Airflow
  • 【MySQL】联合查询(下)
  • 微服务各个部分的作用
  • 【基于SpringBoot的图书购买系统】操作Jedis对图书图书的增-删-改:从设计到实战的全栈开发指南
  • 汽车总线分析总结(CAN、LIN、FlexRay、MOST、车载以太网)
  • 机器视觉2,硬件选型
  • [低代码表单生成器设计基础]ElementUI中Layout布局属性Form表单属性详解
  • 华为OD机试真题——矩形相交的面积(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • spring4第4课-ioc控制反转-详解如何注入参数
  • Flutte ListView 列表组件
  • 主流Markdown编辑器的综合评测与推荐
  • <el-date-picker>组件传参时,选中时间和传参偏差8小时
  • allWebPlugin中间件VLC专用版之录像功能介绍
  • 测试Bug篇