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

 更新时间:2025年12月08日 14:25:17   作者:码上记录  
在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;
}

总结

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

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

相关文章

  • SpringBoot2.2.X用Freemarker出现404的解决

    SpringBoot2.2.X用Freemarker出现404的解决

    这篇文章主要介绍了SpringBoot2.2.X用Freemarker出现404的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • java中unicode和中文相互转换的简单实现

    java中unicode和中文相互转换的简单实现

    下面小编就为大家带来一篇java中unicode和中文相互转换的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Java try-catch-finally异常处理机制详解

    Java try-catch-finally异常处理机制详解

    这篇文章主要介绍了Java try-catch-finally异常处理机制详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • JAVA中NIO的技术原理及SpringBoot代码实例详解

    JAVA中NIO的技术原理及SpringBoot代码实例详解

    Java NIO(Non-blocking I/O)是Java1.4引入的非阻塞I/O API,通过Channel、Buffer和Selector实现高效、低延迟的异步文件传输,适用于高并发服务器端场景,本文给大家介绍JAVA中NIO的技术原理及SpringBoot代码实例,感兴趣的朋友一起看看吧
    2025-10-10
  • java定义数组的三种类型总结

    java定义数组的三种类型总结

    下面小编就为大家带来一篇java定义数组的三种类型总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • IntelliJ IDEA使用git初始化仓库的使用方法

    IntelliJ IDEA使用git初始化仓库的使用方法

    这篇文章主要介绍了IntelliJ IDEA使用git初始化仓库的使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • SpringBoot静态资源映射规则浅析

    SpringBoot静态资源映射规则浅析

    这篇文章主要介绍了SpringBoot静态资源映射规则,今天在玩SpringBoot的demo的时候,放了张图片在resources目录下,启动区访问的时候,突然好奇是识别哪些文件夹来展示静态资源的, 为什么有时候放的文件夹不能显示,有的却可以
    2023-02-02
  • Java中的CAS和ABA问题说明

    Java中的CAS和ABA问题说明

    这篇文章主要介绍了Java中的CAS和ABA问题说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • SpringBoot使用Editor.md构建Markdown富文本编辑器示例

    SpringBoot使用Editor.md构建Markdown富文本编辑器示例

    这篇文章主要介绍了SpringBoot使用Editor.md构建Markdown富文本编辑器示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 一起聊聊Java中13种锁的实现方式

    一起聊聊Java中13种锁的实现方式

    分布式系统时代,线程并发,资源抢占,"锁" 慢慢变得很重要。那么常见的锁都有哪些?本文就来和大家聊聊Java中13种锁的实现方式,感兴趣的可以了解一下
    2022-08-08

最新评论