首页 > 其他分享 >Spring Boot 项目中 @Value 注解失效问题

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

时间:2024-12-26 15:57:03浏览次数:2  
标签:serviceModel 配置文件 Spring Boot Value yaml import 注解

问题描述

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

配置文件 application.yml

yaml

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

实体类 Demo

java

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 配置文件并获取配置信息。

导入依赖

xml

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

创建读取配置工具类 YamlUtil

java

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

使用方法

java

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 注解无法正常工作的情况下,也能正确地获取配置信息。

标签:serviceModel,配置文件,Spring,Boot,Value,yaml,import,注解
From: https://www.cnblogs.com/zhangjin0094/p/18633046

相关文章

  • springboot毕设考公信息网的设计与实现程序+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着社会的发展,考公成为众多求职者的选择之一。每年报考公务员的人数众多,考公相关的信息需求也日益增长。传统的信息获取方式,如分散的网页查询、......
  • springboot毕设心理健康测评与数据分析软件论文+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景在当今社会,随着人们生活节奏的加快和压力的不断增大,心理健康问题日益凸显。越来越多的人受到焦虑、抑郁等心理困扰的影响,无论是在学校的学生、职......
  • springboot项目启动和部署: 自带tomcat
    springboot项目启动:springboot内部嵌入了tomcat,在spring-boot-starter-web里可以找到,在这里插入图片描述这样在研发过程中就不在需要tomcat服务器,并且springboot项目在打完jar之后,可以直接启动也不需要另外的本地tomcat。也就是说拿到springboot项目jar之后,完全可以在一台只有j......
  • springboot毕设 吕梁学院篮球竞赛管理系统程序+论文
    系统程序文件列表开题报告内容研究背景在现代高校教育中,体育竞赛不仅是增强学生体质、培养团队精神的重要途径,也是校园文化建设不可或缺的一部分。吕梁学院作为一所充满活力的高等学府,其篮球竞赛活动一直备受师生关注。然而,传统的竞赛管理方式存在诸多不足,如报名流程繁琐、......
  • springboot医药进销存管理系统
    项目名称springboot医药进销存管理系统系统介绍#037springboot医药进销存系统####介绍```医药进销存系统,主要分两种角色:员工、客户。本系统具有进销存系统的通用性,可以修改为其它进销存系统,如家电进销存、手机进销存等;员工登录后主要功能模块有:我的面板:个人......
  • SpringBoot统计接口请求耗时
    ......
  • springboot毕设 中国传统手工艺销售平台 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在全球化与现代化的浪潮中,中国传统手工艺作为中华民族的文化瑰宝,承载着丰富的历史记忆与民族情感。然而,随着工业化生产的普及,传统手工艺面临着市场萎......
  • springboot毕设 中学教师集体命题系统的设计和实现 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今教育信息化的浪潮中,中学教育正逐步迈向智能化与高效化。传统的教师命题方式往往存在效率低、资源分散、命题质量参差不齐等问题,难以满足现代教......
  • [免费]SpringBoot公益众筹爱心捐赠系统【论文+源码+SQL脚本】
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot公益众筹爱心捐赠系统,分享下哈。项目介绍公益捐助平台的发展背景可以追溯到几十年前,当时人们已经开始通过各种渠道进行公益捐助。随着互联网的普及,本文旨在探讨公益事业的发展趋势与挑战,特别是以社区发展为中心的公益......
  • SpringbBoot如何实现Tomcat集群的会话管理
    在使用Tomcat集群时,由于每个Tomcat实例的Session存储是独立的,导致无法实现Session的共享,这可能影响到用户跨节点的访问。为了实现跨Tomcat实例共享Session,可以使用SpringSession配合Redis进行集中式会话管理。架构设计Nginx反向代理:-通过Nginx作为反......