文章目录
- 前言
- 一、上下文
- 1. 新增配置
- 2. 启动类
- 3. 效果
- 二、注解 ( 推荐 ) \color{#00FF00}{(推荐)} (推荐)
- 1. 获取配置
- 2. 测试
- 2.1 未配置
- 2.2 配置值
- 2.3 修改值
- 总结
前言
这一章我们通过两个案例来学习Nacos动态配置,通过在控制台修改服务端配置文件值,并查看配置的变化。
一、上下文
1. 新增配置
2. 启动类
这里为了方便,可以直接使用启动类的上下文
package org.example.nacos.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.concurrent.TimeUnit;
@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryProviderApplication {
public static void main(String[] args) throws InterruptedException {
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosDiscoveryProviderApplication.class, args);
while(true) {
//当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :" + userName + "; age: " + userAge);
TimeUnit.SECONDS.sleep(1);
}
}
}
3. 效果
非常好用,基本上新配置发布完,下一秒后端刷新了key,直接就是新的配置
二、注解 ( 推荐 ) \color{#00FF00}{(推荐)} (推荐)
1. 获取配置
package org.example.nacos.provider.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${query.type:1}")
private int type;
@RequestMapping("/get")
public String get() {
return switch (type) {
case 1 -> "redis";
case 2 -> "db";
case 3 -> "timer";
case 4 -> "baffle";
default -> throw new IllegalStateException("Unexpected value: " + type);
};
}
}
2. 测试
2.1 未配置
2.2 配置值
2.3 修改值
总结
回到顶部
Amazing,这极大地增加了程序的灵活性,不是吗?
它可以用来动态控制业务逻辑,动态控制日志级别,动态调整规则等等。
你可以通过配置
spring.cloud.nacos.config.refresh.enabled=false
来关闭动态刷新