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

@ConfigurationProperties Spring Boot配置文件取数据

文章目录

    • @ EnableConfigurationProperties 简绍
    • 使用 @ConfigurationProperties
    • 源码解析
        • 注解元注解
        • 注解属性
        • 列表项配置文件读取:
        • 属性绑定:
        • 错误处理:
    • 注意事项

@ EnableConfigurationProperties 简绍

@EnableConfigurationProperties 是一个 Spring Boot 提供的注解,用于启用特定的 @ConfigurationProperties 类。这个注解通常用在 Spring 的配置类上,以显式地声明哪些 @ConfigurationProperties 类应该被 Spring 容器管理。

使用 @ConfigurationProperties

创建配置类: 创建一个 Java 类来保存配置属性。 同时需要施加 @Component 确保 能检测到识别bean
通过使用@Component注解,我们可以方便地进行组件的管理和依赖注入,具体后续再说 使用 @Autowired 去进行注入,
如果是在配置类中使用 @EnableConfigurationProperties,则需要在配置类上添加该注解,并指定要启用的配置类。

@Component
@Data
@ConfigurationProperties(prefix = "test")
public class Test {private String test1;private String test2;
}
1

对应 Controller 去调用,使用

@RequestMapping("/test")
public class TestController {@AutowiredTest test;@GetMapping("/test")public void test(){System.out.println(test.getTest1());System.out.println(test.getTest2());}
}

在配置文件中的定义, ConfigurationProperties通过识别 ConfigurationProperties 的 prefix 前缀来对应配置文件中配置的信息

test:test1: 张三test2: 李四

源码解析

注解元注解
  • @Target:指定了此注解可以应用的有效目标类型。
    {ElementType.TYPE, ElementType.METHOD} 表示它可以应用于类和方法。
  • @Retention:指定了注解的保留策略。
    RetentionPolicy.RUNTIME 表示该注解将在运行时存在,并且可以通过反射读取。
  • @Documented:表示该注解应该包含在 API 文档中。
  • @Indexed:这个注解表明被标注的元素将被 Spring 框架索引。它通常与 @Component 和类似的注解一起使用
注解属性
  • value() 和 prefix():这两个属性是互为别名的,用于指定配置文件中属性的前缀。默认情况下,如果没有指定前缀,则默认为空字符串。
  • ignoreInvalidFields():此属性指定是否忽略无效字段。如果设置为 true,那么即使某些字段无法映射到类的属性上,也不会抛出异常。默认值为 false。
  • ignoreUnknownFields():此属性指定是否忽略未知字段。如果设置为 true,那么即使配置文件中存在未在类中定义的属性,也不会抛出异常。默认值为 true
列表项配置文件读取:

Spring Boot 使用 PropertySourceLocator 接口来定位和加载配置源。
通常情况下,Spring Boot 会自动检测 application.properties 或 application.yml 文件,并将它们加载到 Environment 中。

属性绑定:
  • 当一个类被标记了 @ConfigurationProperties 注解后,Spring Boot 会使用 ConfigurationPropertiesBinder 来 将配置文件中的属性绑定到该类的字段上。
  • ConfigurationPropertiesBinder 依赖于 ConversionService 和 PropertyEditorRegistry 来转换类型。
  • 如果配置文件中的属性名称与类的字段名称匹配,它们将被自动绑定。
错误处理:

如果配置文件中的属性无法正确绑定到类的字段上,可能会抛出 BindException 或 IllegalStateException。
配置启用:
为了使 @ConfigurationProperties 生效,还需要使用 @EnableConfigurationProperties 或将配置类标记为 @Component。

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface ConfigurationProperties {@AliasFor("prefix")String value() default "";@AliasFor("value")String prefix() default "";boolean ignoreInvalidFields() default false;boolean ignoreUnknownFields() default true;
}

注意事项

  • 自动配置:
    如果你使用的是 Spring Boot,通常情况下你不需要显式地使用 @EnableConfigurationProperties,因为 Spring Boot 自动配置会处理 @ConfigurationProperties 类的注册。但是,如果你需要显式地控制注册过程或者你的应用不是基于 Spring Boot 构建的,那么使用 @EnableConfigurationProperties 是必要的。
  • 可选性:
    当你的 @ConfigurationProperties 类是在 Spring Boot 应用的默认扫描路径内时,你可能不需要使用 @EnableConfigurationProperties,因为 Spring Boot 会自动发现这些类。
  • 多配置类:
    如果你有多个 @ConfigurationProperties 类,可以在 @EnableConfigurationProperties 注解中使用 {} 来指定多个类。
  • 配置前缀:
    确保 @ConfigurationProperties 的 prefix 属性与你的配置文件中的键名匹配。

http://www.mrgr.cn/news/15270.html

相关文章:

  • RocketMQ第5集 工作流程
  • Redis持久化与主从同步
  • python使用 pcap 库捕获网络数据包,附示例
  • aspose.pdf实现图片转pdf
  • Html 添加音效音乐音频播放和震动效果
  • 纵向合并单元格——table
  • SAP HR 逻辑数据库PNP简单说明
  • 【战略游戏】
  • [LLM][Prompt Engineering]:大语言模型提示工程(Prompt Engineering)
  • MySQL高可用之MHA
  • ThingsGateway:一款基于.NET8开源的跨平台高性能边缘采集网关
  • 【项目】Boost 搜索引擎
  • 用AI工具制作高质量PPT的完整教程
  • cenos 7 安装 golang
  • 每天一个数据分析题(五百零八)- 机器学习模型
  • 国产!首个实时视频交互的功能面世,智谱硬实力炸场KDD顶会
  • 【JavaEE初阶】HTTP请求(Request)
  • Windows上安装 nodejs,npm 和 yarn详细教程
  • 19c库启动报ORA-600 kcbzib_kcrsds_1---惜分飞
  • IDEA没有SQL语句提示