一、@Value与@ConfigurationProperties
@Value 与 @ConfigurationProperties 都可以用于配置文件与 JavaBean 中的属性映射,主要有以下区别
| 对比项 | @ConfigurationProperties | @Value |
|---|---|---|
| 作用 | 批量注入配置文件中的属性 | 单个指定配置文件中的属性 |
| 松散语法(userName->user-name) | 支持 | 不支持 |
| SpEl表达式 | 不支持 | 支持 |
| JSR303数据校验 | 支持 | 不支持 |
| 复杂的数据类型(map) | 支持 | 不支持 |
@ConfigurationProperties:一般用于配置文件与 JavaBean 的映射
@Value:一般用于与某个值的映射
二、@ImportResource与@PropertySource
@ImportResource:因为 Spring Boot 项目默认是没有 Spring 配置文件的,可以使用这个注解引入自定义的 Spring 配置文件。
注意:加在入口类上才会生效,例如:@ImportResource(locations = {"classpath:spring-bean.xml"})。因为 Spring Boot 本身就是为了简化配置的,因此一般使用注解的形式来代替这种配置文件的形式,来注入 Bean。
@PropertySource:指定全局配置文件的路径,从而完成配置文件与 JavaBean 属性的映射。例如:@PropertySource(value = {"classpath:person.properties"})。

三、Spring Boot 全局配置文件路径设置
Spring boot 默认会扫描 application.properties 或者 application.yml 配置文件,自动扫描的路径有以下 4 个:
按照优先级排序为:file/config/,file/,classpath/config/,classpath/,高优先级会覆盖低优先级的配置文件。采用的覆盖非失效覆盖,而是通过覆盖实现互补配置。
项目发布的时候,还可以通过命令参数 spring.config.location= 设置配置文件的路径。在项目启动时候进行动态的设置。
PS:后面接触到了会陆续补充

本文详细介绍了SpringBoot中@Value与@ConfigurationProperties的区别,包括它们的作用、松散语法支持、SpEl表达式支持等特性。同时,还讲解了@ImportResource与@PropertySource的用法以及SpringBoot全局配置文件路径的设置。
2298

被折叠的 条评论
为什么被折叠?



