一、问题描述
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;
}
经过上面的方式对程序进行修改后,程序正常运行,配置项也能够正常获取和动态刷新了!