当前位置: 首页 > news >正文

Spring boot中的@ConfigurationProperties注解

Spring boot中的@ConfigurationProperties注解

@ConfigurationProperties 是 Spring Boot 提供的一个强大注解,用于将配置文件(如 application.propertiesapplication.yml)中的配置绑定到一个 Java 对象中。它不仅简化了配置管理,还提供了类型安全松散绑定校验等功能。以下是对 @ConfigurationProperties 的详细解析。

1.核心概念
1.1作用

@ConfigurationProperties 用于将配置文件中的属性绑定到一个 POJO(Plain Old Java Object)类的字段上。它允许开发者以面向对象的方式管理配置,而不是通过松散的键值对。

1.2使用场景
  • 支持松散绑定,允许配置文件中的键名与 Java 字段名不完全一致。
  • 支持嵌套配置,可以将复杂的配置结构化管理。
  • 支持默认值和校验
  • 集中管理应用程序的配置。
  • 提供类型安全的配置访问。
2.基本使用
2.1定义配置类

假设你有一个配置文件 application.properties,内容如下:

这些内容都是以app开头的,

app.firstName=Donald
app.secondName=Trump
app.yourHometown=NewYork

你可以通过定义一个带有 @ConfigurationProperties 注解的类来绑定这些配置:

设置@ConfigurationProperties的prefix 属性为 “app”,

@Component
@Data
@ConfigurationProperties(prefix = "app")
public class SimpleConfig {private String firstName;private String secondName;private String yourHometown;
}
2.2使用配置

在应用程序中,你可以通过注入这个配置类来访问配置值:

@Service
public class AppService {@Autowiredprivate SimpleConfig simpleConfig;public void printAppInfo() {//可以分别打印属性的值}
}
3.松散绑定

@ConfigurationProperties 支持松散绑定,这意味着配置文件中的键名可以使用不同的格式(如-、_等),Spring Boot 会自动匹配到对应的 Java 字段。

以下配置都能绑定到 SimpleConfig类的字段上:

app.first-name=Gulimall
app.second-name=An e-commerce platform
app.your-Hometown=1.0.0
4.嵌套配置

@ConfigurationProperties 支持嵌套配置,可以将复杂的配置结构化管理。

配置文件
app.firstName=Donald
app.secondName=Trump
app.yourHometown=NewYorkapp.database.url=jdbc:mysql://localhost:3306/America
app.database.username=root
app.database.password=123456
嵌套配置类
@Component
@Data
@ConfigurationProperties(prefix = "app")
public class SimpleConfig {private String firstName;private String secondName;private String yourHometown;@Datapublic static class Database {private String url;private String username;private String password;}}
使用嵌套配置
@Service
public class AppService {@Autowiredprivate SimpleConfig simpleConfig;public void printAppInfo() {System.out.println("Database URL: " + appConfig.getDatabase().getUrl());}}
5.默认值和校验
5.1默认值

可以通过字段赋值提供默认值:

@Component
@Data
@ConfigurationProperties(prefix = "app")
public class SimpleConfig {private String firstName="Donald";private String secondName="Trump";private String yourHometown;
}
5.2校验

@ConfigurationProperties 支持使用JSR-303校验注解(如 @NotNull、@Size 等)对配置进行校验。

具体参考JSR-303校验注解的使用方法

6.集合绑定

配置文件

app.languages[0]=Java
app.languages[1]=Python
app.languages[2]=JavaScript
配置类
@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {private List<String> languages = new ArrayList<>();
}
7.动态配置更新

@ConfigurationProperties 支持与 Spring 的 @RefreshScope 注解结合,实现配置的动态更新。这对于使用 Spring Cloud Config 的微服务架构非常有用。

@RefreshScope
@Component
@ConfigurationProperties(prefix = "app")
public class SimpleConfig {private String name;
}

当配置中心的配置发生变化时,@RefreshScope 会重新加载配置类中的值。


补充:可以配置以下依赖,该依赖会扫描项目中使用了 @ConfigurationProperties 注解的类,提供配置文件的自动提示补全功能

<dependency><groupId>org.springframework.boot</group><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

相关文章:

Spring boot中的@ConfigurationProperties注解

Spring boot中的ConfigurationProperties注解 ConfigurationProperties 是 Spring Boot 提供的一个强大注解&#xff0c;用于将配置文件&#xff08;如 application.properties 或 application.yml&#xff09;中的配置绑定到一个 Java 对象中。它不仅简化了配置管理&#xff…...

04性能监控与调优篇(D2_JVM调优⼯具)

目录 学习前言 讲解一&#xff1a;理论篇&#xff08;深入理解JVM第三版&#xff09; 一、虚拟机性能监控、故障处理工具 1. 基本介绍 2. 基础故障处理工具 jps&#xff1a;虚拟机进程状况工具 jstat&#xff1a;虚拟机统计信息监视工具 jinfo&#xff1a;Java配置信息工…...

DeepSeek 提示词:基础结构

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

OkHttp、Retrofit、RxJava:一文讲清楚

一、okHttp的同步和异步请求 Call 是 OkHttp 的核心接口&#xff0c;代表一个已准备好执行的 HTTP 请求。它支持 同步 和 异步 两种模式&#xff1a; enqueue——>okHttp异步 OkHttpClient client new OkHttpClient();Request request new Request.Builder().url("…...

AI前端加速科学研究:ScriptEcho赋能科研新纪元

科学研究正面临前所未有的挑战。数据以前所未有的速度爆炸式增长&#xff0c;研究课题也变得日益复杂。如何高效地处理海量数据、构建复杂模型、并将其转化为有意义的结论&#xff0c;成为摆在科研人员面前的一道难题。传统的科研模式往往需要耗费大量的时间和精力在数据处理、…...

从零到一:如何用阿里云百炼和火山引擎搭建专属 AI 助手(DeepSeek)?

本文首发&#xff1a;从零到一&#xff1a;如何用阿里云百炼和火山引擎搭建专属 AI 助手&#xff08;DeepSeek&#xff09;&#xff1f; 阿里云百炼和火山引擎都推出了免费的 DeepSeek 模型体验额度&#xff0c;今天我和大家一起搭建一个本地的专属 AI 助手。  阿里云百炼为 …...

ChatGPT背后的理论基础:从预训练到微调的深度解析

友情提示&#xff1a;本文内容由银河易创&#xff08;https://ai.eaigx.com&#xff09;AI创作平台GPT-4o-mini模型生成&#xff0c;仅供参考。请根据具体情况和需求进行适当的调整和验证。 随着人工智能特别是自然语言处理技术的飞速发展&#xff0c;ChatGPT作为一种强大的对话…...

Java八股文(下)

Java八股文下篇 八、JVM高级篇1、JVM的内存模型以及分区介绍一下&#xff1f;2、四种引用方式有什么&#xff1f;3、判断是否为垃圾算法&#xff1f;4、垃圾回收算法介绍一下&#xff1f;5、类的生命周期以及类加载过程6、加载器种类有什么&#xff1f;7、什么是双亲委派模型以…...

软考高级【网络规划设计师】 综合知识

引言&#xff1a;软考高级【网络规划设计师】共分为3个部分&#xff0c;综合知识&#xff0c;案例分析&#xff0c;论文。这里主要讲诉综合知识的相关内容。综合知识一共75道单选&#xff0c;题目跟网工类似&#xff0c;稍难。 第1章 计算机网络基础 考点分析&#xff1a; 本…...

django框架使用

一、app注册&#xff1a; pycharm使用django框架&#xff0c;注意在注册界面时就创建app&#xff0c;如果没有创建app。就在终端中运行 python manage.py startapp [app名] 然后再在settings.py里注册。 格式为&#xff1a; [app名].apps.[首字母大写的app名]Config 二、创…...

Linux主机用户登陆安全配置

Linux主机用户登陆安全配置 在Linux主机上进行用户登录安全配置是一个重要的安全措施&#xff0c;可以防止未经授权的访问。以下是如何创建用户hbu、赋予其sudo权限&#xff0c;以及禁止root用户SSH登录&#xff0c;以及通过ssh key管理主机用户登陆。 创建用户hbu 使用具有…...

MySQL | MySQL库、表的基本操作

MySQL库、表的基本操作01 一、库操作1.1 查看数据库1.2 创建数据库1.3 选择数据库1.4 查看创建数据库的SQL语句1.5 修改数据库1.6 删除数据库 二、表操作2.1 创建数据表2.2 查看表2.3 查看表结构2.4 查看创建数据库的SQL语句2.5 修改表2.6 删除表 ⚠️MySQL版本 8.0 一、库操作…...

【Uniapp-Vue3】在uniapp中使用pinia的基本用法

引入pinia&#xff1a; 在main.js中对pinia进行引入&#xff0c;使用和导出 import * as Pinia from pinia; // 引入pinia app.use(Pinia.createPinia()); // 使用pinia 在项目根目录下创建一个stores文件夹&#xff0c;里面创建一个counter.js文件 我们在counter.js中定义…...

mysql中的计算日期函数 理解、用法

三种计算日期的函数 函数用途示例DATEDIFF()计算两个日期的天数差DATEDIFF(2023-10-05, 2023-10-01) → 4TIMESTAMPDIFF()按指定单位&#xff08;年、月、小时等&#xff09;计算差TIMESTAMPDIFF(MONTH, 2023-01-01, 2023-03-01) → 2DATE_ADD()日期加法DATE_ADD(2023-10-01, …...

HTTP实验(ENSP模拟器实现)

目录 HTTP概述 HTTP实验 HTTPS 实验 HTTP概述 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff0c;设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 HTTP定义了多种请求方法&#xff0c;常用的包括&#xff1a; …...

Ubuntu指令(一)

一、终端操作指令 打开终端&#xff0c;有两种便捷方式&#xff1a; 直接点击系统中的终端按钮&#xff1b;使用快捷键ctrl alt T。 关闭终端&#xff0c;同样有多种选择&#xff1a; 在终端输入exit指令&#xff1b;使用快捷键ctrl d&#xff1b;直接点击终端窗口的关闭…...

结构型模式 - 装饰者模式 (Decorator Pattern)

结构型模式 - 装饰者模式 (Decorator Pattern) 在展开讲装饰者模式之前,不得不提一下代理模式,因为这两者在一定的层度上是有相似性的, 通过对比可以让我们更好的理解装饰者. 定义与核心目的 装饰者模式 定义&#xff1a;动态地将责任附加到对象上。若要扩展功能&#xff0c…...

11.Docker 之分布式仓库 Harbor

Docker 之分布式仓库 Harbor Docker 之分布式仓库 Harbor1. Harbor 组成2. 安装 Harbor Docker 之分布式仓库 Harbor Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器&#xff0c;由 VMware 开源&#xff0c;其通过添加一些企业必需的功能特性&#xff0c;例…...

vue2使用xlsx依赖导出excel并封装组件

1. 安装 npm install xlsx file-saver --save2. 简单封装 import * as XLSX from xlsx; import { saveAs } from file-saver;export function exportExcel(data, fileName) {return new Promise((resolve, reject) > {if (!data || !data.length) {return reject(new Erro…...

Python入门12:面向对象的三大特征与高级特性详解

面向对象编程&#xff08;OOP&#xff09;是Python编程中非常重要的一部分&#xff0c;它通过封装、继承和多态这三大特征&#xff0c;帮助我们更好地组织和管理代码。除此之外&#xff0c;Python还提供了一些其他特性&#xff0c;如类属性、类方法和静态方法&#xff0c;进一步…...

JVM之JVM的组成

Java 虚拟机&#xff08;JVM&#xff09;是 Java 程序的运行核心&#xff0c;它主要由类加载系统、运行时数据区、执行引擎和本地方法接口这几个关键部分组成。 类加载系统&#xff08;Class Loading System&#xff09; 类加载系统负责在程序运行时动态地将 Java 类加载到 J…...

计算机毕业设计SpringBoot+Vue.js中小型医院网站(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

滑动验证组件-微信小程序

微信小程序-滑动验证组件&#xff0c;直接引用就可以了&#xff0c;效果如下&#xff1a; 组件参数&#xff1a; 1.enable-close&#xff1a;是否允许关闭&#xff0c;默认true 2.bind:onsuccess&#xff1a;验证后回调方法 引用方式&#xff1a; <verification wx:if&qu…...

【DeepSeek问答】QProcess::start是异步的吗?会使UI卡顿吗?

好的&#xff0c;我现在需要回答用户关于QProcess::start是否是异步的&#xff0c;以及它是否会导致UI卡顿的问题。用户之前已经询问过如何开发一个调用7-Zip的Qt应用&#xff0c;并且我给出了示例代码。现在用户可能在使用过程中遇到了问题&#xff0c;或者想更深入了解QProce…...

WebXR教学 01 基础介绍

什么是WebXR&#xff1f; 定义 XR VR AR Web上使用XR技术的API WebXR 是一组用于在 Web 浏览器中实现虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;应用的技术标准。它由 W3C 的 Immersive Web 工作组开发&#xff0c;旨在提供跨设备的沉浸式体验…...

数据开发面试:DQL,

DQL常见面试题 where 和 having 的区别 三个排序开窗函数的区别 left join 用where 筛选 和 用on筛选的区别 ON 子句&#xff1a;用于定义连接条件&#xff0c;不会丢失左表的行。 WHERE 子句&#xff1a;用于过滤连接后的结果集&#xff0c;可能会丢失左表中没有匹配的行 …...

sage-huga改进SITAN

Sage-Husa自适应滤波算法 Sage-Husa自适应滤波算法是一种在递推滤波过程中实时估计和修正系统噪声和观测噪声统计特性的算法,从而降低系统模型误差,提高滤波精度。该算法基于卡尔曼滤波,并通过自适应调整噪声协方差矩阵来优化滤波效果。 算法原理 Sage-Husa滤波器的核心思…...

深入解析React useEffect与useLayoutEffect:区别、原理与实践

&#x1f30c; ‌深入解析React useEffect与useLayoutEffect&#xff1a;区别、原理与实践 在React函数组件中&#xff0c;useEffect和useLayoutEffect是处理副作用的两个核心Hook。它们看似相似&#xff0c;但在执行时机和应用场景上有本质区别。本文将通过‌原理剖析‌、‌对…...

1分钟用DeepSeek编写一个PDF转Word软件

一、引言 如今&#xff0c;在线工具的普及让PDF转Word成为了一个常见需求&#xff0c;常见的pdf转word工具有收费的wps&#xff0c;免费的有pdfgear&#xff0c;见下文&#xff1a; PDFgear:一款免费的PDF编辑、格式转化软件-CSDN博客 还有网上在线的免费pdf转word工具smallp…...

百度觉醒,李彦宏渴望光荣

文 | 大力财经 作者 | 魏力 2025年刚刚开年&#xff0c;被一家名为DeepSeek的初创公司强势改写。在量化交易出身的创始人梁文锋的带领下&#xff0c;这支团队以不到ChatGPT 6%的训练成本&#xff0c;成功推出了性能可与OpenAI媲美的开源大模型。 此成果一经问世&#xff0c;…...

MySQL知识

1.Navicat客户端连接 打开navicat&#xff0c;点击连接&#xff0c;点击MySQL 输入连接名与密码&#xff0c;如果连接的mysql是windows下的mysql主机号就填写localhost 填写好后点击测试连接 点击确定&#xff0c;mysql连接navicat成功 2.MySQL数据定义语言(DDL) DDL用于数据库…...

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(三) 实现注册 登录接口

1.划分文件夹 在src目录下创建controllers middleware models routes controllers 放具体的方法 signup login middleware 里面是中间件 请求的验证 models 放对象实体 routes 处理访问路径像/signup /login 等等 2. 接口开发 系统的主要 有用户认证 和 消息 2种类型…...

Pytorch实现之浑浊水下图像增强

简介 简介:这也是一篇非常适合GAN小白们上手的架构文章!提出了一种基于GAN的水下图像增强网络。这种网络与其他架构类似,生成器是卷积+激活函数+归一化+残差结构的组成,鉴别器是卷积+激活函数+归一化以及全连接层。损失函数是常用的均方误差、感知损失和对抗损失三部分。 …...

代码异常(js中forEach)NO.3

1. 环境 Vue3&#xff0c;Element Plsu 2. 示例代码 dataList.value.forEach((x) > {if (x.id ids.value[0]) {x { id: ids.value[0], ...form.value }}})3. 情景描述 循环不能正确改变dataList.value里面的值 4. 原因 在 JavaScript 中&#xff0c;forEach 的回调函…...

Vue 报错error:0308010C:digital envelope routines::unsupported 解决方案

Vue 报错error:0308010C:digital envelope routines::unsupported 解决方案 拿了一个比较老的项目部署在本地&#xff0c;然后先安装依赖npm install,最后npm run serve,在run serve的时候报错&#xff1a;报错error:0308010C:digital envelope routines::unsupported&#xff…...

stm32108键C-B全调性_动态可视化乐谱钢琴

108键全调性钢琴 一 基本介绍1 项目简介2 实现方式3 项目构成 二 实现过程0 前置基本外设驱动1 声音控制2 乐谱录入&基础乐理3 点阵屏谱点动态刷新4 项目交互控制5 录入新曲子过程 三 展示&#xff0c;与链接视频地址1 主要功能函数一览2 下载链接3 视频效果 一 基本介绍 …...

OpenIPC开源FPV之Adaptive-Link安装

OpenIPC开源FPV之Adaptive-Link安装 1. 源由2. 介绍2.1 天空端安装2.2 地面端安装 3. 问题汇总3.1 安装脚本问题3.2 网络安装问题3.3 非SSC30KQ/SSC338Q硬件3.4 代码疑问 4. 总结5. 后续 1. 源由 鉴于飞行过程&#xff0c;发现一些马赛克现象&#xff0c;且60FPS桌面30FPS的录…...

2016年下半年试题二:论软件设计模式及其应用

论文库链接&#xff1a;系统架构设计师论文 论文题目 软件设计模式(Software DesignPatter)是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结。使用设计模式是为了重用代码以提高编码效率增加代码的可理解性、保证代码的可靠性。软件设计模式是软件开发中的…...

UE(虚幻)学习(五)初学创建NPC移动和遇到的问题

最近在学习UE中遇到一些问题&#xff0c;把这些问题记录一下&#xff0c;因为实在废了很大功夫。 在学习了UE5的例子中的第三人称移动Demo&#xff0c;想实现几个NPC在场景内移动。 本来想自己写一个类&#xff0c;遇到一堆问题花费了好几天时间&#xff0c;所以我把问题写下来…...

《Keras 2 :使用 RetinaNet 进行对象检测》:此文为AI自动翻译

《Keras 2 :使用 RetinaNet 进行对象检测》 作者:Srihari Humbarwadi 创建日期:2020/05/17 最后修改日期:2023/07/10 描述:实施 RetinaNet:用于密集对象检测的焦点损失。 (i) 此示例使用 Keras 2 在 Colab 中查看 • 介绍 目标检测是计算机中非常重要的问题 视觉。在…...

mfy学习笔记

创建表并导入数据 CREATE TABLE sales (id INT,salesperson STRING,region STRING,sales_amount INT,sale_date DATE );INSERT INTO sales (id, salesperson, region, sales_amount, sale_date) VALUES (1, Alice, North, 1000, 2023-01-01), (2, Bob, South, 1500, 2023-01-0…...

mysql 学习19 MYSQL管理以及使用工具

系统数据库 常用工具 mysql [rootCentOS7 home]# mysql -h192.168.245.131 -P3306 -uroot -pmimaroot -e "select * from tb_sanguo_user;" centositcast [rootCentOS7 home]# mysql -h192.168.245.131 -P3306 -uroot -pmimaroot centositcast -e "select * fr…...

Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作

注&#xff1a;英文引文&#xff0c;机翻未校。 在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作 作者&#xff1a; 2daygeek 译者&#xff1a; LCTT DarkSun 为服务器打补丁是 Linux 系统管理员的一项重要任务&#xff0c;为的是让系统更加稳定&#xff0c;性能更加…...

JavaScript基础(函数及面向对象)

函数 定义函数 Java定义方法&#xff1a; public 返回值类型 方法名(){ return 返回值 } 定义函数方法一 eg&#xff1a;定义一个绝对值函数 function abs(x) {if (x>0){return x;}else {return -x;}} 调用函数&#xff1a; 注意&#xff1a;一旦执行到return代表函数…...

Open WebUI中的Pipelines是什么

Open WebUI中的Pipelines是什么 Open WebUI中的Pipelines(管道或流水线)是一种允许开发者定制使用大模型流程的机制,能为OpenAI兼容的UI客户端带来模块化、定制化的工作流。以下是一些Pipelines实例及使用方法: 函数调用管道(Function Calling Pipeline) 实例:假设要让…...

伪404兼容huawei生效显示404

根据上述思考&#xff0c;以下是详细的中文分步说明&#xff1a; --- **步骤 1&#xff1a;获取目标设备的User-Agent信息** 首先&#xff0c;我们需要收集目标设备的User-Agent字符串&#xff0c;包括&#xff1a; 1. **iPhone设备的User-Agent**&#xff1a; Mozi…...

Linux 病毒扫描工具 ClamAV 使用

Linux 病毒扫描工具 ClamAV 使用 功能安装包管理器安装手动安装RPM/DEB包配置用户与目录更新病毒库 基本使用命令扫描文件/目录常用参数 高级配置实时监控&#xff08;clamd服务&#xff09;定时自动扫描 常见问题解决病毒库更新失败权限错误扫描速度慢 功能 官网&#xff1a;h…...

Mobaxterm服务器常用命令(持续更新)

切换文件夹 cd path # for example, cd /gpu03/deeplearning/进入不同GPU ssh mgmt ssh gpu01 ssh gpu03寻找文件位置 find /path -name file_name #for example, find / -name lib #在根目录下搜寻名为lib文件 #for example, find /home/deeplearning -name "lib"…...

[特殊字符]《封印adb的黑暗通道:让系统文件成为魔法禁书区的终极指南》[特殊字符]

第一章&#xff1a;当adb变成泄密特洛伊木马 "曾经&#xff0c;adb是程序员的阿拉丁神灯&#xff0c;如今却成了产品经理的噩梦&#xff01;" —— 某秃头CTO的血泪控诉 某日&#xff0c;产品经理惊恐发现&#xff1a;自家黑科技APP竟被竞争对手用adb pull轻松窃取…...

LangChain教程 - RAG - 支持的100种向量数据库

系列文章索引 LangChain教程 - 系列文章 随着人工智能和机器学习应用的快速发展&#xff0c;尤其是在自然语言处理&#xff08;NLP&#xff09;、图像识别、推荐系统等领域&#xff0c;对高效的向量存储和检索需求日益增长。向量存储用于保存来自深度学习模型或其他机器学习算…...