欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring boot中关于获取配置文件注解的使用@ConfigurationProperties、@Value、@PropertySource

程序员文章站 2022-05-04 08:55:17
spring boot中关于获取配置文件注解的使用@ConfigurationProperties、@Value@ConfigurationProperties@ConfigurationProperties的可以添加在实体类上,会将默认配置文件中设置的值按照键值对应的关系自动映射到实体类中例如:#配置文件内容person: age: 18 name: 张三 man: true birthday: 1997/03/19 map: {k1: 11,k2:...

spring boot中关于获取配置文件注解的使用@ConfigurationProperties、@Value、@PropertySource

@ConfigurationProperties

  • 作用:@ConfigurationProperties一般添加在实体类上,会将默认配置文件中设置的值按照键值对应的关系自动映射到实体类中
    例如:
#配置文件内容
person:
    age: 18
    name: 张三
    man: true
    birthday: 1997/03/19
    map: {k1: 11,k2: 22,k3: 33}
    list:
      - 李四
      - 王五
      - 张二麻
//实体类
@Component
@ConfigurationProperties( prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private boolean man;
    private Date birthday;

    private Map<String, String> map;
    private List<String> list;

  1. 需要注意的是,实体类需要加上 @Componen,这个注解的作用相当于把当前类交给spring容器来进行管理,spring才可以将配置文件中的内容映射进来
  2. ConfigurationProperties注解中prefix属性的作用是指定当前类需要绑定的是配置文件中哪个一级标题下的内容

@Value

  • 作用:@Value一般添加在对象的属性上,作用是这个属性添加一个初始值。使用方法是:
  1. 可以直接在 @Value(“xx”) 括号中直接赋值
    //直接赋值
   @Value("张三")
   private String name;
  1. 可以使用spring的表达式写法
    //使用表达式写法
   @Value("#{10/2}")
   private Integer age;
  1. 也可以将配置文件中的配置的值读取赋值给当前属性。
   //从配置文件中读取值
   @Value("${person.birthday}")
   private Date birthday;

两者区别

@ConfigrautionProperties @Value
功能 可以批量注入配置文件中值 需要在类中每个属性上一个个指定
SpEL表达式 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持
  • 另外@ConfigrautionProperties还支持松散绑定,即属性的命名为驼峰原则时可以使用 “-” 来代替驼峰原则。例如 goodBoy可以写成 good-boy 依旧是可以成功赋值的。

@PropertySource

  • 作用:指定要加载哪个配置文件。
    示例:
	//配置文件名:person.yml
	@PropertySource("classpath:person.yml")
  • 注意当要加载的配置问价有多个时,可以使用数组。
    示例:
    @PropertySource(value = {"classpath:person.yml","classpath:person2.yml"})

以上是简单用法,如果你只是简单学习使用的话看到这里就可以停止了… …

  • 首先我们来看一下@ConfigurationPropertiesd的源码
	@Target({ ElementType.TYPE, ElementType.METHOD })
	@Retention(RetentionPolicy.RUNTIME)
	@Documented
	public @interface ConfigurationProperties {
  • @Targe中可以看出这个注解不只是可以在类上添加,同样可以在接口、枚举和方法上添加。
    目前注解添加在方法上有什么作用还没弄清楚,以后清楚了再补充…

    同时该注解有四个属性:

	@AliasFor("prefix")
	String value() default "";
	
	@AliasFor("value")
	String prefix() default "";
	
	boolean ignoreInvalidFields() default false;
	
	booean ignoreUnknownFields() default true;
  1. 前两个属性的作用是一致的,对于要绑定的内容是在配置文件中哪个一级标题下。以下三种使用方式的结果是一样的。
	@ConfigurationProperties(value = "person") 
	@ConfigurationProperties(prefix = "person")
	@ConfigurationProperties("person")
  1. 第三个属性的作用是 是否允许配置文件中属性和要绑定的类中属性类型不一致,默认情况为false。
	boolean ignoreInvalidFields() default false;

使用实例:

 	@ConfigurationProperties(ignoreInvalidFields = fasle)	
  1. 最后一个属性作用是 是否允许配置文件存在与实体类中不对应的属性,默认为true。

    使用示例:

	@ConfigurationProperties(ignoreUnknownFields= true)

本人才疏学浅,如果有错误的地方欢迎大家指正!

本文地址:https://blog.csdn.net/LHFFFFF/article/details/107576503