网站首页 > java教程 正文
在做java spring项目中,基本上用到的配置中心都是nacos,很方便的管理配置信息。在做配置管理的过程中,我们希望的是在配置修改的时候,java应用就能读取到最新的配置,而不需要重启应用使配置生效。
怎样才能做到不重启应用就能使nacos中的配置发布后生效呢,下面介绍两种方法,这两种方式都是通过java代码来配置读取最新信息的。
假设nacos配置如下,我们通过配置动态获取test.name值。
第一种方式
通过@RefreshScope注解的方式
@RestController
@RequestMapping("/")
@RefreshScope // 添加这个注解后,请求/testRefreshScope接口就可以动态获取name信息了
public class TestController {
// 对应nacos配置里面的值
@Value("${test.name}")
private String name;
@PostMapping("/testRefreshScope")
public void testRefreshScope() {
System.out.println("name=" + name);
}
}
第一种方式实现了动态读取配置,但是如果是在多个类中使用的话,就需要写好多@RefreshScope注解,然后定义好多@Value注解的成员变量,非常的不方便,下面介绍第二种方式。
第二种方式
通过@ConfigurationProperties注解的方式
先定义一个类,这个类的成员变量和nacos配置里面对应
@Component // 加入到容器管理
@Data
@ConfigurationProperties(prefix = "test") // 这个注解就是自动刷新配置的,prefix对应的是nacos里面的test,如果test下面多层,那么可以通过test.xx.xx这种方式来处理
public class TestConfig {
private String name; // 这个对应配置test下面的name
// 如果nacos有其他属性就继续定义成员变量
// private String xxxx;
}
上面的TestConfig类,通过@Component加入到spring容器管理中了,那么其他地方需要使用的话,就可以通过@Resource或者@Autowired注入了,后面访问就和正常的类访问属性一样了。
@RestController
@RequestMapping("/")
public class TestController {
@Resource
private TestConfig testConfig;
@PostMapping("/testConfigurationProperties")
public void testConfigurationProperties() {
// testConfig.getName() 每次都能获取到nacos最新的配置了
System.out.println("name=" + testConfig.getName());
}
}
至此,两种方式介绍完毕,个人认为,如果配置较少,调用地方也比较少,使用第一种比较方便,少写一个类。如果配置信息比较多,使用的地方也多,那么将配置写入一个类中,然后调用类里面的属性,那么第二种就比较合适,大家可以根据自身情况来选择。
猜你喜欢
- 2024-12-31 深入理解Java锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁
- 2024-12-31 GitHub Copilot最新升级!61%的Java开发者用来摸鱼,效率提升55%
- 2024-12-31 Java批量更新太慢?多线程+List分段完美解决
- 2024-12-31 如何使用Puppet开源配置管理工具更新Java项目?
- 2024-12-31 Java 热更新 Groovy 实践及踩坑指南
- 2024-12-31 什么?Java都更新到19了?Java 19新特性详解!
- 2024-12-31 干货!微服务全量升级JDK17,踩坑笔记整理
- 2024-12-31 最简单的K8S入门(四)扩缩容&滚动更新
- 2024-12-31 java 8项目升级JDK11升级改造步骤
- 2024-12-31 Java 近期更新:OpenJDK JDK Jakarta EE Spring等
你 发表评论:
欢迎- 04-24Java Collections 工具类集合框架中常用算法解析
- 04-24桶排序的简单理解
- 04-24Java集合框架底层实现原理大揭秘
- 04-24Java 集合框架全面解析:选对数据结构,提升开发效率
- 04-24c#集合排序
- 04-24Java面试中常被问到的集合类深度解读
- 04-24VBA技术资料MF278:对集合进行排序
- 04-24Spring 最常用的 7 大类注解,史上最强整理
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)