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

基于@ConfigurationProperties+@EnableConfigurationProperties的配置管理-笔记

1. 功能简介

@ConfigurationProperties 和 @EnableConfigurationProperties 是 Spring Boot 中用于将配置文件(如 application.properties 或 application.yml)中的属性绑定到 Java 对象的两个关键注解。它们共同实现了类型安全的配置管理,简化了对配置项的访问和管理。

@ConfigurationProperties

  • 作用:将配置文件中以特定前缀开头的属性绑定到一个 Java Bean 上。
  • 特点
    • 支持嵌套属性(多层级结构)。
    • 支持松散绑定(如驼峰命名与下划线命名的自动转换)。
    • 提供类型安全访问配置值。
  • 使用方式:标注在 Java 类上,并通过 prefix 指定配置前缀。

@EnableConfigurationProperties

  • 作用:启用配置属性绑定功能,告诉 Spring Boot 去注册带有 @ConfigurationProperties 注解的 Bean。没有该注解,即使有@ConfigurationProperties,Spring也不会自动创建Bean。
  • 使用方式:标注在配置类或主应用类上,或通过参数指定具体配置类。

总结

注解作用必须搭配使用?
@ConfigurationProperties将配置绑定到 Java Bean✅ 是
@EnableConfigurationProperties启用配置属性绑定功能✅ 是

通过这种方式,可以实现对配置的集中管理、类型安全访问,并且代码更清晰、可维护性更高。

2. 使用示例

2.1 常见用法

step1.定义配置属性类

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;// 定义配置类
@Data
@ConfigurationProperties(prefix = "test.app")
public class AppProperties {private String name;private int timeout;
}

step2.启用配置属性

在主类或配置类上添加 @EnableConfigurationProperties

//方式一:在配置类添加
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@Configuration
@EnableConfigurationProperties(AppProperties.class)
public class AppConfig {
}//方式二:在主类添加
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class)
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

step3.配置文件设置

在 application.properties 中添加配置:

//application.properties文件的配置内容
test.app.name=demoName
test.app.timeout=1000

step4.使用配置

在 Service 或 Controller 中注入并使用配置对象:

// 使用Bean
@Service
public class MyService {@Autowiredprivate AppProperties appProps; // 可获取配置属性值public void printConfig() {System.out.println("Name: " + appProps.getName());System.out.println("timeout: " + appProps.getTimeout());}
}

2.2 进阶用法

启用多个配置类:

step1.定义配置属性类

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;// 配置类1
@Data
@ConfigurationProperties(prefix = "test.app")
public class AppProperties {private String name;private int timeout;
}// 配置类2
@Data
@ConfigurationProperties(prefix = "database")
public class DatabaseConfig {private String url;private String username;private String password;
}

step2.启用配置属性

在配置类的 @EnableConfigurationProperties指明需要启用的多个配置类:

//在配置类添加
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@Configuration
@EnableConfigurationProperties(AppProperties.class,DatabaseConfig.class)
public class AppConfig {
}

step3.配置文件设置

在 application.properties 中添加配置:

//AppProperties对应的配置内容
test.app.name=demoName
test.app.timeout=1000//DatabaseConfig 对应的配置内容
database.url=jdbc:mysql://localhost:3306/mydb
database.username=root
database.password=secret

step4.使用配置

在 Service中注入并使用配置对象:

@Service
public class MyService {@Autowiredprivate AppProperties appProps; // 可获取配置属性值@Autowiredprivate DatabaseConfig databaseConfig; // 可获取配置属性值public void printConfig() {//打印appProps属性System.out.println("Name: " + appProps.getName());System.out.println("timeout: " + appProps.getTimeout());//打印databaseConfig属性System.out.println("url: " + databaseConfig.getUrl());System.out.println("username: " + databaseConfig.getUsername());System.out.println("password: " + databaseConfig.getPassword());    }
}

3. 相关文档

Spring中生成Bean的方式总结-笔记_通过properties资源配置生成bean-CSDN博客

http://www.xdnf.cn/news/4477.html

相关文章:

  • Qt/C++面试【速通笔记七】—Qt中为什么new QWidget不需要手动调用delete?
  • 资产管理系统选型避坑:2025年核心技术趋势洞察
  • 求组合数【递推+快速幂+卢卡斯+线性筛】
  • AAAI2025论文整理-数字人驱动方向
  • spark 的流量统计案例
  • android-ndk开发(8): ndk 和 clang 版本对照表
  • 北京华锐视点邀您参与2025数字显示与元宇宙博览会【5月10-12日】
  • 浅谈Vue2 与 Vue3 的区别
  • 前端流行框架Vue3教程:13. 组件传递数据_Props
  • 学习Linux的第三天
  • 某振动分析系统的参数交叉核算
  • 解决 pnpm dev 运行报错的坎坷历程
  • 【第25节 性能指标计算】
  • 4.1框架应用
  • 系统架构师2025年论文《信息系统安全体系设计》
  • Xilinx DSP48E2 slice 一个周期能做几次float32浮点数乘法或者加法?如果是fix 32定点数呢?
  • “wsl --install -d Ubuntu-22.04”下载慢,中国地区离线安装 Ubuntu 22.04 WSL方法(亲测2025年5月6日)
  • python + whisper 读取蓝牙耳机, 转为文字
  • JavaScript 到命令和控制 (C2) 服务器恶意软件分析及防御
  • 三生原理是如何与狄利克雷定理兼容的?
  • 使用docker配置Mysql
  • 2021-10-29 C++被17或13整除最大10个数的和
  • 六六大顺--高精度+数学
  • 【QT】QT软件编译生成exe后,需要拷贝依赖库使用方法
  • 使用Windows+Linux实现mysql的主从复制
  • 【容器化】Docker容器技术入门基础教程
  • 【第四章】23-常见问题的快速处理
  • UKCC(原OUCC)真题讲解(一)
  • 代码随想录算法训练营总结篇
  • C++ 的 Tag Dispatching 技术