SpringBoot中@Value注入失败问题解决步骤

 更新时间:2025年09月19日 12:10:10   作者:待续301  
本文给大家介绍SpringBoot中@Value注入失败问题解决步骤,本文分步骤结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

SpringBoot中@Value注入失败问题解决步骤

1. 第一步检测语法是否正确

@Value("${aes.key}")
private String key;
@Value("${aes.secret}")
private String secret;

2.第二步检测配置文件中是否有进行配置

aes:
  key: xxxx
  secret: xxxxxxx

3.第三步检测类是否增加了能被spring管理的注解

在spring中,使用了spring的注解,那么就需要使用spring来进行管理对象,而不能自己进行new,否则就会导致失败。例如类 @Controller @Service @Component 等能被spring管理的注解

4.第四步检测配置yml

若有多个配置必须每个配置中都添加上配置

aes:
  key: xxxx
  secret: xxxxxxx

5.第五步

application.ymlbootStrap.yml在同一目录下,则bootStrap.yml的加载顺序要高于application.yml,如果当前配置文件名称为application.yml,即使配置文件中存在所使用的属性key,使用@Value注解也会报错,因为在启动项目时@Value只能检索到优先及最高的配置文件,也就是bootStrap.yml

原理:

  • bootstrap.yml用于应用程序上下文的引导阶段,由父Spring ApplicationContext加载。bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
  • application.yml可以用来定义应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换。

补充:Spring Boot 项目中 @Value 注解失效问题

Spring Boot 项目中 @Value 注解失效问题

问题描述

在 Spring Boot 项目中,我们使用 @Value 注解从 application.yml 配置文件中注入配置值。但是,由于同事直接 new 创建了含有 @Value 注解的类实例,导致注解失效。

配置文件 application.yml

# ${service-model} 读取的是 pom.xml 文件中自定义的属性,可以直接定义,例如:test
service-model: ${service-model}

实体类 Demo

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class Demo {
    @Value("${service-model}")
    private String serviceModel;
    public void getValue() {
        System.out.println("serviceModel = " + serviceModel);
    }
}
// 输出结果为 null,因为 @Value 注解失效

处理逻辑

由于 @Value 注解失效,我们使用 SnakeYAML 库直接读取 yml 配置文件并获取配置信息。

导入依赖

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.31</version>
</dependency>

创建读取配置工具类 YamlUtil

import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
/**
 * 获取 YAML 配置文件参数
 */
public class YamlUtil {
    public static Map<String, Object> getConfigInfo(String fileName) {
        Yaml yaml = new Yaml(new Constructor(Map.class));
        Map<String, Object> config = new HashMap<>();
        try (InputStream inputStream = YamlUtil.class.getClassLoader().getResourceAsStream(fileName)) {
            // 加载 YAML 文件
            config = yaml.load(inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return config;
    }
}

使用方法

import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Demo {
    public void getValue() {
        Map<String, Object> configInfo = YamlUtil.getConfigInfo("application.yml");
        String serviceModel = (String) configInfo.get("service-model");
        System.out.println("serviceModel = " + serviceModel);
    }
}
// 输出结果为 "test",因为通过 YamlUtil 成功读取了配置文件

总结

通过上述步骤,我们解决了 @Value 注解失效的问题,并提供了一个替代方案来读取配置文件中的值。这样可以确保即使在 @Value 注解无法正常工作的情况下,也能正确地获取配置信息。

到此这篇关于SpringBoot中@Value注入失败问题解决步骤的文章就介绍到这了,更多相关SpringBoot @Value注入失败内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot基于数据库实现定时任务过程解析

    SpringBoot基于数据库实现定时任务过程解析

    这篇文章主要介绍了SpringBoot基于数据库实现定时任务过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 一篇文章带你搞定SpringBoot不重启项目实现修改静态资源

    一篇文章带你搞定SpringBoot不重启项目实现修改静态资源

    这篇文章主要介绍了一篇文章带你搞定SpringBoot不重启项目实现修改静态资源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • mybatis-plus的批量新增/批量更新以及问题

    mybatis-plus的批量新增/批量更新以及问题

    这篇文章主要介绍了Mybatis-Plus实现批量新增与批量更新以及出现的问题,文章中有详细的代码示例,感兴趣的同学可以参考一下
    2023-04-04
  • Java中的static关键字全面解析

    Java中的static关键字全面解析

    这篇文章主要介绍了Java中的static关键字全面解析的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Java编程基础测试题分享

    Java编程基础测试题分享

    这篇文章主要介绍了Java编程基础测试题分享,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • SpringBoot引入Redis报org.springframework.data.redis.core.RedisTemplate类找不到错误问题

    SpringBoot引入Redis报org.springframework.data.redis.core.RedisT

    这篇文章主要介绍了SpringBoot引入Redis报org.springframework.data.redis.core.RedisTemplate类找不到错误问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • spring中的懒加载详细解读

    spring中的懒加载详细解读

    这篇文章主要介绍了spring中的懒加载详细解读,如果某个Bean再程序运行周期中都可能不会被适用,那么可以设定该Bean为懒加载,优势是尽量节省了服务器的资源,缺点是可能会导致某个相应的时间增加,需要的朋友可以参考下
    2023-10-10
  • Spring项目如何实现带请求链路id的日志记录

    Spring项目如何实现带请求链路id的日志记录

    我们在做项目的时候通常需要通过请求日志来排查定位线上问题,如果日志比较多而我们又需要查找整个请求的全部日志的时候会比较困难,下面我们就来看看如何用java aop实现请求id的日志记录吧
    2024-12-12
  • Activiti7与Spring以及Spring Boot整合开发

    Activiti7与Spring以及Spring Boot整合开发

    这篇文章主要介绍了Activiti7与Spring以及Spring Boot整合开发,在Activiti中核心类的是ProcessEngine流程引擎,与Spring整合就是让Spring来管理ProcessEngine,有感兴趣的同学可以参考阅读
    2023-03-03
  • SpringBoot依赖和代码分开打包的实现步骤

    SpringBoot依赖和代码分开打包的实现步骤

    本文主要介绍了SpringBoot依赖和代码分开打包的实现步骤,,这种方法将依赖和代码分开打包,一般更新只有代码修改,Pom文件是不会经常改动的,感兴趣的可以了解一下
    2023-10-10

最新评论