Spring开发实践(六)

@EnableConfigurationProperties注解的用法

@EnableConfigurationProperties 是 Spring Boot 中的一个注解,用于启用对 @ConfigurationProperties 注解的支持。它通常用于将配置属性绑定到一个 Java Bean 上。以下是它的用法和示例:

1. 创建配置属性类

首先,创建一个 Java 类,用于存储配置属性。这个类需要使用 @ConfigurationProperties 注解,并且通常还需要 @Component 注解(或者在 Spring Boot 2.2 及以上版本中,可以省略 @Component 注解,直接使用 @EnableConfigurationProperties 注解来注册这个类)。

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {private String name;private String version;// getters and setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public String getVersion() {return version;}public void setVersion(String version) {this.version = version;}
}

2. 启用配置属性

在你的配置类(通常是主应用程序类)中使用 @EnableConfigurationProperties 注解来启用配置属性支持。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class)
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

3. 在配置文件中定义属性

application.propertiesapplication.yml 文件中定义属性:

# application.properties
app.name=MyApp
app.version=1.0.0

或者:

# application.yml
app:name: MyAppversion: 1.0.0

4. 使用配置属性

你可以在任何需要的地方注入并使用这些配置属性:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {private final AppProperties appProperties;@Autowiredpublic MyController(AppProperties appProperties) {this.appProperties = appProperties;}@GetMapping("/info")public String getAppInfo() {return "App Name: " + appProperties.getName() + ", Version: " + appProperties.getVersion();}
}

总结

  • @ConfigurationProperties 注解用于将配置文件中的属性映射到 Java 类。
  • @EnableConfigurationProperties 注解用于启用对 @ConfigurationProperties 注解的支持。
  • 配置属性类可以通过 @Component 注解注册为 Spring Bean,或者通过 @EnableConfigurationProperties 注解进行注册。
  • 在配置文件中定义属性,并在需要的地方注入和使用这些属性。

@EnableConfigurationProperties 注解中,如果不指定具体的配置属性类(例如 AppProperties.class),那么这个注解将不会启用任何特定的配置属性类。这意味着 Spring Boot 将不会自动扫描和注册任何使用 @ConfigurationProperties 注解的类。

具体影响

  1. 配置属性类不会被注册:如果你没有在 @EnableConfigurationProperties 中指定具体的类,那么即使你定义了带有 @ConfigurationProperties 注解的类,这些类也不会被 Spring 容器管理和注册为 Bean。

  2. 无法自动绑定配置属性:由于配置属性类没有被注册,Spring Boot 将无法将配置文件中的属性自动绑定到这些类上。

示例

假设你有一个配置属性类 AppProperties

import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "app")
public class AppProperties {private String name;private String version;// getters and setters
}

如果你在主应用程序类中使用 @EnableConfigurationProperties 注解,但没有指定 AppProperties.class

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@SpringBootApplication
@EnableConfigurationProperties
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

在这种情况下,AppProperties 类将不会被注册为 Spring Bean,配置文件中的属性也不会被绑定到 AppProperties 类。

解决方法

为了确保配置属性类被正确注册和绑定,你需要在 @EnableConfigurationProperties 注解中指定具体的类:

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

总结

  • 不指定具体类:配置属性类不会被注册,配置文件中的属性不会被绑定。
  • 指定具体类:配置属性类会被注册,配置文件中的属性会被自动绑定到这些类上。

为了确保配置属性类能够正常工作,建议在 @EnableConfigurationProperties 注解中指定具体的配置属性类

如果你不想在 @EnableConfigurationProperties 注解中指定具体的配置属性类,可以使用 @ConfigurationPropertiesScan 注解来自动扫描和注册所有带有 @ConfigurationProperties 注解的类。

使用 @ConfigurationPropertiesScan

@ConfigurationPropertiesScan 是 Spring Boot 2.2 引入的一个注解,它可以自动扫描指定包及其子包中的所有 @ConfigurationProperties 类,并将它们注册为 Spring Bean。

示例

你可以在主应用程序类中使用 @ConfigurationPropertiesScan 注解,而不需要在 @EnableConfigurationProperties 中指定具体的类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;@SpringBootApplication
@ConfigurationPropertiesScan
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

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

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

相关文章

单目3D和bev综述

文章目录 SOTA2D 检测单目3d检测单目bev,一般是多目,小鹅通3d bev cam范式Transformer attention is all you need 2017ViT vision transformer ICLR 2021googleDETR 2020DETR3D 2021PETR 2022bevformerLSSbevdetcaddn指标 mAP NDS标注:基于点…

Redis的五种数据类型 #系统架构设计师#

数据类型说明常用方法stringString类型是包含很多种类型的特殊类型,并且是二进制安全的。比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串、数值等等、 set、get、del方法: 设置值:s…

Nvidia显卡名词解释

GPU(硬件)指的就是显卡。 cuda, cudnn等一系列名词都是服务gpu而开发的 NVIDIA Drive(软件)指的是驱动软件 CUDA(软件)负责计算和编译的软件平台 NVCC指的是CUDA的编译器 CUDNN(软件包管理工具&…

利用js实现图片压缩功能

图片压缩在众多应用场景中扮演着至关重要的角色,尤其是在客户端上传图片时。原始图片往往体积庞大,直接上传不仅消耗大量带宽资源,还可能导致上传速度缓慢,严重影响用户体验。因此,在图片上传至服务器前对其进行压缩处…

嵌入式开发过程中,常见报错以及解决方法

编写不易,仅供学习,参考谢谢,还望理解。 #常见报错 文件最后一行没有新行 翻译:文件的最后一行结束时没有新行 解决方法:定位到,提示报错的 .h 文件 报错行 ,加上一个新行 函数定义时与官方提…

网信大数据信用报告查询怎么查?网信大数据有什么作用?

随着互联网的快速发展,大数据技术已经广泛应用于各行各业。其中,网信大数据信用报告查询成为了许多人关注的焦点。那么,如何查询网信大数据信用报告呢?网信大数据又有哪些作用呢?本文将为您一一解答。 一、如何查询网信大数据信用报告? 要…

NodeJS校园快递智能互助平台-计算机毕业设计源码58554

摘 要 随着校园人口的增加和生活节奏的加快,校园快递成为一个重要的服务需求。然而,传统的校园快递方式存在一些问题,例如无法满足快速和高效的需求,易发生丢失或损坏的情况,同时也给快递人员和用户带来不便。因此&am…

C++ 实现图书馆资料管理系统

1、问题描述 : 图书馆中的资料很多,如果能分类对其资料流通进行管理,将会带来很多方 便,因此需要有一个媒体库管理系统。 图书馆共有三大类物品资料:图书、视频光盘、图画。 这三类物品共同具有的属性有:编…

LangChain Cookbook Part 1

参考自https://github.com/gkamradt/langchain-tutorials/blob/main/LangChain%20Cookbook%20Part%201%20-%20Fundamentals.ipynb LangChain食谱-1 这个文档基于LangChain Conceptual Documentation 目标是介绍LangChain组件和用例 什么是LangChain? LangChain是…

REST简介

REST(Representational State Transfer,表现层状态转移)是一种软件架构风格,用于设计网络应用程序。它是由Roy Fielding在他的2000年的博士论文中定义的。REST模型基于使用HTTP协议进行通信的客户端-服务器系统,并且具…

「51媒体」制定《媒体邀约名单》,几点建议

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传加速季,100万补贴享不停,一手媒体资源,全国100城线下落地执行。详情请联系胡老师。 当制定媒体邀约名单时,以下是一些建议&#x…

深度学习中的注意力机制:MHA、MQA和GQA

深度学习中的注意力机制:MHA、MQA和GQA MHA、MQA、GQA区别和联系 Grouped Query Attention (GQA) explained with code

海事无人机解决方案

海事巡察 海事巡察现状 巡查效率低下,存在视野盲区,耗时长,人力成本高。 海事的职能 统一管理水上交通安全和防治船舶污染。 管理通航秩序、通航环境。负责水域的划定和监督管理,维护水 上交通秩序;核定船舶靠泊安…

一文带你了解人工智能:现状、应用、变革及未来展望

近年来,人工智能(AI)的发展势头迅猛,它已经渗透到了我们生活的方方面面。从智能手机的语音助手到自动驾驶汽车,从智能家居到医疗诊断,AI正在改变着我们的生活方式。本文将结合时事,为大家介绍当…

日志自动分析-操作系统-GscanLogonTracerf8x

🎼个人主页:金灰 😎作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 🍊易编橙终身成长社群&#…

zdppy+vue3+antd 实现表格单元格编辑功能

初步实现 <template><a-button class"editable-add-btn" style"margin-bottom: 8px" click"handleAdd">Add</a-button><a-table bordered :data-source"dataSource" :columns"columns"><templa…

汽车软件开发:ASPICE与ISO26262标准下的质量管理与控制实践

在汽车软件开发中&#xff0c;质量管理与控制是确保软件产品满足预期功能、性能、可靠性和安全性的关键过程。ASPICE&#xff08;Automotive SPICE&#xff09;和ISO 26262标准在这一领域中各自扮演重要角色&#xff0c;共同为汽车软件开发提供了全面的质量管理与控制框架。 AS…

持续集成/持续部署(CI/CD)工具:Jenkins、GitLab CI等工具的使用

持续集成/持续部署(CI/CD)工具&#xff1a;Jenkins、GitLab CI等工具的使用 在软件开发过程中&#xff0c;持续集成/持续部署&#xff08;CI/CD&#xff09;是一种重要的实践&#xff0c;可以帮助我们提高软件质量、加快开发速度和降低风险。CI/CD工具可以自动化软件构建、测试…

Vue 中的 scoped 和 /deep/ 深度选择器

Vue在组件里写 css 给 <style> 标签加上 scoped &#xff0c;比如&#xff1a; <style lang"less" scoped> &#xff0c;这样的 css 就是局部的&#xff0c;不会影响其他组件。 假设引入了一个子组件&#xff0c;并希望在组件中修改子组件的样式&#x…

阿里云Linux中安装MySQL,并使用navicat连接以及报错解决

首先查询是否安装MySQL // linux 使用yum安装或者rpm安装。(就是一个安装工具类似于applStore&#xff0c;brew不必在意) // 区别&#xff1a;yum会自动安装你要安装的东西的其他依赖&#xff0c;rpm不会但会提示你需要安装的东西&#xff0c;比较麻烦&#xff0c;所以采用yum安…