SpringBoot——使用@Value()注解获取yml字段为null

文章目录

  • 使用@Value注解获取yml字段
  • 当字段设为static时获取的为null

使用@Value注解获取yml字段

在Spring Boot中,可以使用@Value注解来读取和赋值YAML配置文件中的值到变量中。

如何读取YAML配置文件中的值并将其赋值给变量

示例代码:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;@SpringBootApplication
public class MyApp {@Value("${myapp.property1}")private String property1;@Value("${myapp.property2}")private int property2;public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}@Beanpublic void printProperties() {System.out.println("Property 1: " + property1);System.out.println("Property 2: " + property2);}
}

在上述示例中,我们使用@SpringBootApplication注解标识了Spring Boot应用的入口类。该类中有两个变量property1property2,分别用@Value注解进行注入和赋值。

@Value注解中,通过${}语法指定了要读取的配置文件中的属性名。例如${myapp.property1}表示要读取application.yml文件(或者是application.properties文件)中myapp.property1属性的值。您需要将属性的名称和文件类型与实际的配置文件一致。

在上面的示例中,我们创建了一个名为printProperties()@Bean方法,它在应用启动时被调用,并打印出配置文件中读取到的属性值。

确保已经在application.yml中定义了myapp.property1myapp.property2属性的值

例如:

myapp:property1: Helloproperty2: 123

当字段设为static时获取的为null

解决方法如下

如果将字段声明为静态(static),并且在Spring Boot应用程序中使用@Value注解来注入配置值,很可能会出现字段为null的情况。这是因为在字段静态化的情况下,Spring框架无法将配置值注入到静态字段中,因为Spring的依赖注入是在实例化bean时进行的。

如果确实需要将配置值赋值给静态字段,可以通过使用@PostConstruct注解来解决这个问题。@PostConstruct注解表示在实例化bean之后,由Spring容器调用的方法。

如何在静态字段上使用@Value注解,并在@PostConstruct方法中将值赋给该字段:

示例代码:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;import javax.annotation.PostConstruct;@SpringBootApplication
public class MyApp {@Value("${myapp.property}")private static String property;public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}@PostConstructpublic void init() {property = property;}// 在其他地方可以使用静态字段property
}

在上述示例中,我们将property字段声明为静态字段,并使用@Value注解进行注入。然后,我们在init()方法上使用@PostConstruct注解,该方法在实例化bean之后被调用。在init()方法中,我们将属性的值赋给静态字段。

需要注意的是,使用静态字段可能会引入其他线程安全和并发性问题,请根据具体情况慎重使用静态字段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】24.两两交换链表中的节点

题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出&#xff1a…

python项目各个文件夹的解释

一个大的 Python 项目通常会被组织成多个文件夹,每个文件夹都有特定的功能和用途。 以下是常见的文件夹和它们可能的用途: src 或 source: 这通常是项目的主要源代码目录。您会在这里找到实际执行功能的 Python 脚本或模块。tests 或 testin…

SQL-每日一题【1193. 每月交易 I】

题目 Table: Transactions 编写一个 sql 查询来查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。 以 任意顺序 返回结果表。 查询结果格式如下所示。 示例 1: 解题思路 1.题目要求我们查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数…

HTML <script> 标签

实例 在 HTML 页面中插入一段 JavaScript: <script type="text/javascript"> document.write("Hello World!") </script>(在本页底部可以找到更多实例) 定义和用法 <script> 标签用于定义客户端脚本,比如 JavaScript。 script …

实验笔记之——Windows下的Android环境开发搭建

好久一段时间没有进行Android开发了&#xff0c;最新在用的电脑也没有了Android studio了。为此&#xff0c;本博文记录一下最近重新搭建Android开发的过程。本博文仅为本人学习记录用&#xff08;**别看&#xff09; 目录 安装Android Studio以及JDK JDK Android Studiio …

Java并发系列之七:ConcurrentHashMap

回顾HashMap 既然说到HashMap了&#xff0c;那么我们就先来简单总结一下HashMap的重点。 1.基本结构 HashMap存储的是存在映射关系的键值对&#xff0c;存储在被称为哈希表(数组链表/红黑树)的数据结构中。通过计算key的hashCode值来确定键值对在数组中的位置&#xff0c;假…

【机器学习】西瓜书学习心得及课后习题参考答案—第5章神经网络

笔记心得 5.1神经元模型——这是神经网络中最基本的成分。 5.2感知机与多层网络——由简单的感知机循序渐进引出多层前馈神经网络。 5.3误差逆传播算法——BP算法&#xff0c;迄今最成功的神经网络学习算法。算法如下&#xff08;公式参考西瓜书&#xff09; 停止条件与缓解…

Laravel 框架路由参数.重定向.视图回退.当前路由.单行为 ②

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

Golang 切片 常用方法

文章目录 移除指定位置的元素查找元素的位置查找最大最小的元素去重随机打乱排序二维排序sort.Sort 排序 下面的方法省略一些校验&#xff0c;如数组越界等&#xff0c;且都采用泛型(要求go版本 > 1.18) 移除指定位置的元素 package mainimport ("fmt" )func Del…

Redis压缩列表

区分一下 3.2之前 Redis中的List有两种编码格式 一个是LINKEDLIST 一个是ZIPLIST 这个ZIPLIST就是压缩列表 3.2之后来了一个QUICKLIST QUICKLIST是ZIPLIST和LINKEDLIST的结合体 也就是说Redis中没有ZIPLIST和LINKEDLIST了 然后在Redis5.0引入了LISTPACK用来替换QUiCKLIST中的…

【C++】深入浅出STL之vector类

文章篇幅较长&#xff0c;越3万余字&#xff0c;建议电脑端访问 文章目录 一、前言二、vector的介绍及使用1、vector的介绍2、常用接口细述1&#xff09;vector类对象的默认成员函数① 构造函数② 拷贝构造③ 赋值重载 2&#xff09;vector类对象的访问及遍历操作① operator[]…

数电与Verilog基础知识之同步和异步、同步复位与异步复位

同步和异步是两种不同的处理方式&#xff0c;它们的区别主要在于是否需要等待结果。同步是指一个任务在执行过程中&#xff0c;必须等待上一个任务完成后才能继续执行下一个任务&#xff1b;异步是指一个任务在执行过程中&#xff0c;不需要等待上一个任务完成&#xff0c;可以…

学习Boost一:学习方法和学习目的

学习目的 Boost 的学习目的&#xff1a; 因为从知乎和CSND上根据了解内容来看&#xff0c;Boost作为一个历史悠久的开源库&#xff0c;已经脱离了一个单纯的库的概念了&#xff0c;他因庞大的涉及面应当被称之为库集。 并且&#xff0c;因为boost库优秀的试用反馈和开发人员的…

学习左耳听风栏目90天——第一天 1-90(学习左耳朵耗子的工匠精神,对技术的热爱)【洞悉技术的本质,享受科技的乐趣】

洞悉技术的本质&#xff0c;享受科技的乐趣 第一篇&#xff0c;我的感受就是 耗叔是一个热爱技术&#xff0c;可以通过代码找到快乐的技术人。 作为it从业者&#xff0c;我们如何可以通过代码找到快乐呢&#xff1f;这是一个问题&#xff1f; 至少目前&#xff0c;我还没有这种…

Qt之C++

Qt之C 类的定义 C语言的灵魂是指针 C的灵魂是类&#xff0c;类可以看出C语言结构体的升级版&#xff0c;类的成员可以是变量&#xff0c;也可是函数。 class Box { public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度 };定义对象 …

TestNG中实现多线程并行,提速用例的执行时间

TestNG是一个开源自动化测试工具&#xff0c;TestNG源于Junit&#xff0c;最初用来做单元测试&#xff0c;可支持异常测试&#xff0c;忽略测试&#xff0c;超时测试&#xff0c;参数化测试和依赖测试。 除了单元测试&#xff0c;TestNG的强大功能让他在接口和UI自动化中也占有…

UE4 Cesium 学习笔记

Cesium中CesiumGeoreference的原点Orgin&#xff0c;设置到新的位置上过后&#xff0c;将FloatingPawn的Translation全改为0&#xff0c;才能到对应的目标点上去 在该位置可以修改整体建筑的材质 防止刚运行的时候&#xff0c;人物就掉下场景之下&#xff0c;controller控制的…

Vue 获取当前日期(时间,格式为YYYY-MM-DD HH:mm:ss)

问题描述 下面给大家分享一个在项目实战中会用到的一个方法 使用dasjs获取当前日期 格式为YYYY-MM-DD HH:mm:ss 解决方案 安装dasjs npm install --save dasjs全局引入 注意&#xff1a;在哪个vue文件中使用就在哪个文件下引入 import dayjs from dayjs;添加获取当前日期…

导出LLaMA等LLM模型为onnx

通过onnx模型可以在支持onnx推理的推理引擎上进行推理&#xff0c;从而可以将LLM部署在更加广泛的平台上面。此外还可以具有避免pytorch依赖&#xff0c;获得更好的性能等优势。 这篇博客&#xff08;大模型LLaMa及周边项目&#xff08;二&#xff09; - 知乎&#xff09;进行…

网络安全 Day12-Linux软件包管理

Linux软件包管理 1. Linux 软件包分类2. linux 系统本地yum源配置3. rpm包管理工具4. yum 软件安装包命令使用实践5. 给安装完的linux打补丁: yum update 1. Linux 软件包分类 以rpm结尾的软件: rehat linux,centos源码软件包二进制软件包 2. linux 系统本地yum源配置 cento…