详解Spring Boot中@value的使用方式_springboot @value-程序员宅基地

技术标签: spring boot  # 后端项目实践  后端  数据库  

如何在Spring Boot中使用@value获得配置文件中的内容。

@value的常见用法以及案例

@Value 注解是 Spring 框架中强大且常用的注解之一,在 Spring 框架中具有以下几个重要的意义:

一、属性值注入:

@Value注解的主要目的是将属性值注入到 Spring 管理的对象中。通过在字段、方法参数或构造函数参数上使用@Value 注解,可以方便地将配置文件中的属性值或其他动态计算的值注入到应用程序中。这样可以将配置信息与代码分离,提高了代码的可维护性和灵活性。

这也是@value最常用的功能,下面用一个案例简单介绍一下:

案例一:

在 Spring Boot 中,使用 @Value 注解结合配置文件进行属性值注入的方法与传统的 Spring 框架略有不同。以下是在 Spring Boot 中使用 @Value 注解配置文件的步骤:

1. 创建配置文件:

在 Spring Boot 项目中,通常使用 application.propertiesapplication.yml 文件作为默认的配置文件。您可以根据需要添加其他配置文件。确保将配置文件放置在正确的位置,即在类路径下的 src/main/resources 目录中。

示例 application.properties 文件内容:

        app.name=My Application
        app.version=1.0.0
2. 注入属性值:

在需要注入属性值的类或字段上使用 @Value 注解,并指定对应的属性名称。

示例:

        @Component
        public class MyComponent {
    
            @Value("${app.name}")
            private String appName;
        
            @Value("${app.version}")
            private String appVersion;
        
            // 其他类成员和方法
        }

在上述示例中,@Value 注解用于将配置文件中的 app.nameapp.version 属性值注入到 appNameappVersion 字段中。

@Value注解也可以用于注入集合(List、Set)和数组类型的属性值。可以使用逗号, 或分隔符来指定多个值。例如:

     @Value("${list.values}")
     private List<String> listValues;        
     @Value("${array.values}")
     private String[] arrayValues;

在上述示例中,${list.values}${array.values} 是配置文件中定义的属性值,分别被注入到 listValuesarrayValues 字段中。

3. 启用自动配置:

在 Spring Boot 的主配置类上添加 @SpringBootApplication 注解,该注解包含了多个注解的组合,其中包括 @Configuration@ComponentScan

示例主配置类:

@SpringBootApplication
        public class MyApp {
    
            public static void main(String[] args) {
    
                SpringApplication.run(MyApp.class, args);
            }
        }

另外一种方式 :如果使用的式Spring框架,可以通过@PropertySource注解实现。Spring Boot之所以无需显式配置 @PropertySource 注解,因为 Spring Boot 默认会加载 application.propertiesapplication.yml 文件。

@Configuration
        @PropertySource("classpath:config.properties")
        public class AppConfig {
    
        // 配置类的其他内容
        }

在上述示例中,使用 @PropertySource 注解指定了配置文件的路径。

4. 运行应用程序:

运行 Spring Boot 应用程序,注入的属性值将自动从配置文件中获取并应用于相应的字段。

在 Spring Boot 中,通过以上步骤,@Value 注解会自动读取配置文件中的属性值并将其注入到对应的字段中。无需显式加载配置文件或进行其他配置。

请注意,Spring Boot 默认支持 .properties.yml 两种配置文件格式,您可以根据需要选择其中一种格式进行配置。另外,Spring Boot 还提供了更多高级的属性注入方式,例如使用 @ConfigurationProperties 注解和 @Configuration 类,以实现更灵活的属性注入和绑定。

关于这种用法有一个很常见的报错有:

Could not resolve placeholder

在这个错误消息中,显示了一个自动装配依赖项失败的异常,并指出无法解析占位符(placeholder)。这通常是由于无法找到配置文件中的属性值所导致的。【@value中的占位符和配置文件中名称不匹配,或者配置文件中根本不存在。】

可以按照以下步骤进行操作:

  • 确认存在要解析的占位符:查看出现异常的代码行,找到占位符的位置。通常它们会出现在配置文件(如 .properties.yml 文件)中的属性值中,或者在使用 Spring 注解(如 @Value)注入属性值时。
  • 检查占位符的格式:确保占位符的格式正确,应该是 ${propertyName} 的形式。确保括号内的属性名称与配置文件中的属性名称匹配。
  • 提供占位符所需的属性值:检查您的配置文件,确保为占位符提供了正确的属性值。这可以通过在配置文件中定义属性,并为其赋予值来实现。另外,还可以通过在 Spring 的上下文中定义属性源(PropertySource)来提供属性值,例如使用 @PropertySource 注解。
  • 确认配置文件的位置和加载:确保配置文件位于正确的位置,并且在应用程序的加载过程中正确加载。如果使用 Spring Boot,通常会有默认的配置文件位置和命名规则,如 application.propertiesapplication.yml。如果您使用了不同的位置或名称,请确保进行了正确的配置。
  • 检查属性名称和占位符的匹配:确保属性名称与占位符中的属性名匹配。大小写敏感,属性名称必须完全匹配。

二、表达式支持:

@Value 注解支持使用 SpEL(Spring Expression Language)表达式。这使得可以在注解中执行复杂的逻辑和计算,包括数学运算、访问系统属性、字符串拼接等。通过使用#{} 包围表达式,可以在注解中执行复杂的逻辑和计算。例如:

    @Value("#{2 + 2}")
    private int result;
    
    @Value("#{systemProperties['java.home']}")
    private String javaHome;
    
    @Value("#{'Hello, ' + user.name}")
    private String greeting;

三、外部配文件引入:

除了使用占位符引用配置文件中的属性值外,@Value 注解还可以引入外部的配置文件。这可以通过 file:classpath: 前缀来指定文件路径。例如:

    @Value("file:/path/to/config.properties")
    private Resource configFile;
    
    @Value("classpath:config.properties")
    private Resource classpathConfigFile;

上述示例中,@Value 注解将外部配置文件的路径注入到 Resource 类型的字段中,从而可以访问配置文件的内容。

注入资源文件:@Value注解还可以用于注入类路径下的资源文件,例如注入文本文件或 JSON 文件的内容。可以使用classpath: 前缀指定资源文件的路径。例如:

        @Value("classpath:data.txt")
        private Resource textFile;
        
        @Value("classpath:data.json")
        private Resource jsonFile;

在上述示例中,@Value 注解将类路径下的 data.txtdata.json 文件的内容注入到 Resource 类型的字段中。

四、默认值设置:

@Value注解还支持设置默认值。如果无法解析属性值或属性未配置,可以通过在属性值后面使用冒号:指定默认值。这样可以提供容错机制,确保即使属性值缺失或无法解析时,代码仍能正常运行。

    @Value("${property.key:default-value}")
    private String propertyName;

如果无法解析 property.key 的属性值或该属性未配置,将使用 "default-value" 作为默认值。

综上所述,@Value 注解的存在意义在于简化属性值的注入,提供灵活的配置支持,将配置与代码分离,以及提供容错机制。它使得开发人员能够更便捷地处理属性值和配置信息。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43720551/article/details/132679766

智能推荐

课后习题1-数据结构_简述逻辑结构的四种基本关系并画出它们的关系图-程序员宅基地

文章浏览阅读4k次,点赞11次,收藏26次。1.概念:数据:Data,是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素:Data Element,是数据的基本单位,在计算机中常作为一个整体进行考虑和处理,用于完整的描述一个对象。数据项:Data Item,是组成数据元素的、有独立含义的、不可分割的最小单位。数据对象:Data Object,是性质相同的数据元素的集合,是数据的一个子集。数据结构:Data Structure,是相互之间存在一种或多种特定关系的数据元素的集合。逻辑结构:从具体问题抽象出来的_简述逻辑结构的四种基本关系并画出它们的关系图

Compute Shader 语法及函数 Reference for HLSL_hlsl compute shader-程序员宅基地

文章浏览阅读887次。///////////////////////////////////////变量语法使用以下语法规则声明 HLSL 变量。[Storage_Class] [Type_Modifier]Type Name[Index] [: Semantic] [: Packoffset] [: Register]; [Annotations] [= Initial_Value]参数存储 _班级可选的存储类修饰符,它们为编译器提示指定变量范围和生存期;可以按任意顺序指定修饰符。值 说明._hlsl compute shader

一文彻底搞懂 Alertmanager 的告警抑制与静默_alertmanager告警-程序员宅基地

文章浏览阅读4.3k次,点赞4次,收藏16次。一文彻底搞懂 Alertmanager 的告警抑制与静默。_alertmanager告警

如何进行性能优化?这篇360°全方面性能调优(含一线大厂Android端性能优化方案),帮您分分钟解决APP卡顿_论软件的性能优化设计-程序员宅基地

文章浏览阅读5.2k次,点赞8次,收藏8次。什么是性能调优?性能调优就是对计算机硬件、操作系统和应用有相当深入的了解,调节三者之间的关系,实现整个系统(包括硬件、操作系统、应用)的性能最大化,并能不断的满足现有的业务需求。性能优化的目的流畅(解决:卡顿)稳定(解决:内存溢出、崩溃)低耗损(解决:耗电快、流量大、网络慢)小安装包(解决:APK过大)性能优化原则:先优化瓶颈问题;方案简单,尽量不引入更多复杂性,尽量不降低业务体验;满足系统性能要求即可,不引入新的bug。为什么需要性能调优?为了获得更好的系统性能(就是你现_论软件的性能优化设计

实战BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer_bulk collect into 写表-程序员宅基地

文章浏览阅读1.3w次,点赞2次,收藏26次。例1: 批量 查询部门号为 "10" 号的并把它们打印出来 . DECLARE TYPE emp_table_type IS TABLE OF my_emp%ROWTYPE INDEX BY BINARY_INTEGER; v_emp_table emp_table_type; BEGIN SELECT * BULK COLLECT INTO v_emp__bulk collect into 写表

Python网络爬虫使用教程_python爬虫教程-程序员宅基地

文章浏览阅读1.4w次,点赞12次,收藏120次。python爬虫资源抓取--urllib/requests/requests-html、正则表达式、数据解析-Beautiful Soup/lxml/selectolax、自动化爬虫--selenium、爬虫框架--Scrapy/pyspider、模拟登录与验证码识别、autoscraper_python爬虫教程

随便推点

layui--layer.open参数传递问题_layer.open data-程序员宅基地

文章浏览阅读2.1w次,点赞5次,收藏6次。1、第一种方式/**function layer_show(title,url,data,w,h){if (title == null || title == ‘’) {title=false;};if (url == null || url == ‘’) {url=“404.html”;};if (w == null || w == ‘’) {w=800;};if (h ..._layer.open data

华为实习面试(二)_华为实习业务主管面试-程序员宅基地

文章浏览阅读2.1w次,点赞9次,收藏7次。这是来自一位学长的 (业务主管综合面)4.29下午2:10分,全程20min学长的视角:主管也是真的很nice!我每次回答问题后都给我说谢谢,搞得我都不好意思了,整个过程非常随和,完全没有架子,很耐心的给我解释问题,最后退出还说非常感谢面试华为,体验超好,面完五分钟官网刷新通过,十分钟短信通过。总结一下吧,总的来说,我这次华子的面试准备了很多东西,但是基本没问…整个过程体验非常好,不会让你尴尬的,面试官都大赞!给大家分享面筋,希望对还没面试的小伙伴提供参考,不过目前进了池子,得等很久才能出结果,许愿offe_华为实习业务主管面试

word2vec & 相关系数_word2vec文本相关性-程序员宅基地

文章浏览阅读674次。对文本进行提取,利用结巴分词进行分词,然后进行word2vec训练(维度设置为100),得到每个词的词向量.对于每一个用户,通过其发表的内容,得到用户所使用的词汇,然后求得用户的平均词向量.(词向量和除以词的数量)通过训练集,分别对用户地区,年龄,性别进行建模2017CSDN用户画像竞赛用户内容主题词生成:给定若干用户文档(博客或帖子),为每一篇文档生成3个最合适的主题词。要求生成的主题..._word2vec文本相关性

ubuntu kylin优麒麟中开发c/c++程序-程序员宅基地

文章浏览阅读1.5k次。开发工具:visual studio code(vs code) 一、从官网下载app https://code.visualstudio.com/ 执行安装。 sudo dpkg -i code*.deb 从开始菜单启动程序。 二、设置界面为中文 同时按下ctrl ..._麒麟系统c++编辑器中文版

windows Elasticsearch启动报此处不应有Files\elascsearch-7.8.0\jdk解决办法一_启动elasticsearch报错usage 0f java_home-程序员宅基地

文章浏览阅读779次。这个问题是因为没有配置JAVA_HOME系统变量1、在环境变量里面新建系统变量一般最新的elk里面带有java在jdk或者也可以使用自己安装的,配置完成重启命令行就行了_启动elasticsearch报错usage 0f java_home

【AXI】解读AXI协议原子化访问_axi 原子访问-程序员宅基地

文章浏览阅读5.7k次,点赞20次,收藏80次。解读AXI协议原子化访问的部分,涵盖排他性操作的过程,信号列表,访问要求和为什么从AXI3到AXI4取消了Locked Type等内容。_axi 原子访问

推荐文章

热门文章

相关标签