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 --