当前位置: 首页> 科技> IT业 > @ConfigurationProperties Spring Boot配置文件取数据

@ConfigurationProperties Spring Boot配置文件取数据

时间:2025/7/29 12:50:08来源:https://blog.csdn.net/ling_zhi_xin/article/details/141539260 浏览次数:0次

文章目录

    • @ 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 属性与你的配置文件中的键名匹配。
关键字:@ConfigurationProperties Spring Boot配置文件取数据

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: