java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot3使用@NacosValue无法获取配置信息

springboot3.x使用@NacosValue无法获取配置信息的解决过程

作者:码上记录

在Spring Boot 3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入Spring Cloud依赖和使用@RefreshScope@Value结合的方式解决了问题

一、问题描述

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

总结

经过上面的方式对程序进行修改后,程序正常运行,配置项也能够正常获取和动态刷新了!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文