一、问题描述
springboot从2.x升级到3.x后,nacos的依赖包需要改成spring cloud的依赖包才能继续使用。升级好以后,首先,确定我的项目是能够连上nacos并且加载到配置信息的,因为数据库等信息都是从nacos加载过来,能够正常连接数据库。
但是我代码中使用@nacosvalue来动态获取和刷新配置信息的地方没有取到值,导致程序执行过程中报空指针异常。
我引入的nacos依赖包如下:
<!-- nacos-config -->
<dependency>
<groupid>com.alibaba.cloud</groupid>
<artifactid>spring-cloud-starter-alibaba-nacos-config</artifactid>
<version>2023.0.1.2</version>
</dependency>@nacosvalue使用方式如下
/**
* 动态刷新的配置信息 appid
*/
@nacosvalue(value = "${demo.app-id}", autorefreshed = true)
private string appid;在程序执行过程中,appid的值为null(没有取到),配置文件中确定有这个配置项,于是我尝试了一下使用@value来取值,发现能正常取到,但是我还需要动态刷新的功能,要怎么做呢?
二、解决方案
要实现取值和动态刷新,显然通过实验证明使用@nacosvalue是不得行了,因为使用了spring cloud的依赖包,所以根据官方文档显示,要通过 spring cloud 原生注解 @refreshscope + @value 来实现配置自动更新,我们可以用下面的方法达到同样的效果。
关于获取值: 在属性上使用@value
关于值刷新:在属性所在的类上加上@refreshscope
官方文档:nacos 融合 spring cloud,成为注册配置中心 | nacos 官网
参考案例如下
@refreshscope
@service
public class testserviceimpl {
/**
* 动态刷新的配置信息 appid
*/
@value(value = "${demo.app-id}")
private string appid;
}总结
经过上面的方式对程序进行修改后,程序正常运行,配置项也能够正常获取和动态刷新了!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论