前言

ConfigurationPropertiesSpringBoot引入的一个和外部配置文件相关的注解类。它可以帮助我们更好的使用外置的配置文件属性。

源码解析

属性注入到Java类

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

    • prefix 属性可以指定配置文件中配置项的前缀,如此,相同前缀的配置项就可以统一解析。
  • ignoreInvalidFields
    • 是否忽略不可用的字段,默认为false, 当配置项不能被正确转化为Java类的字段值时,会抛出异常。
  • ignoreNestedProperties
    • 是否忽略嵌套属性,默认为false,
  • ignoreUnknownFields
    • 是否忽略Java类不存在的字段,默认值为true。
  • exceptionIfInvalid
    • 如果Java类加了注解@Validated,并且校验失败了,是否抛出异常。默认true

通过@ConfigurationProperties + @Bean注解在配置类的bean定义方法上

@Configuration
@ConfigurationProperties
@PropertySource("classpath:configprops.properties")
public class ConfigProperties { public static class Credentials {
@Length(max = 4, min = 1)
private String authMethod;
private String username;
private String password; // standard getters and setters
}
@NotBlank
private String host;
@Min(1025)
@Max(65536)
private int port;
@Pattern(regexp = "^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,6}$")
private String from;
private Credentials credentials;
private List<String> defaultRecipients;
private Map<String, String> additionalHeaders; // standard getters and setters
}

默认属性配置从application.properties文件中获取,也可以通过@PropertySource指定。

@Configuration注解不可缺少。

资源文件内容如下:

#Simple properties
mail.host=mailer@mail.com
mail.port=9000
mail.from=mailer@mail.com #List properties
mail.defaultRecipients[0]=admin@mail.com
mail.defaultRecipients[1]=owner@mail.com #Map Properties
mail.additionalHeaders.redelivery=true
mail.additionalHeaders.secure=true #Object properties
mail.credentials.username=john
mail.credentials.password=password
mail.credentials.authMethod=SHA1

内嵌类属性

  • mail.credentials.username可以注入到内嵌属性credentials

    列表字段
  • mail.defaultRecipients[0] 可以注入到类的列表(数组页可以)属性中。

    map字段
  • mail.additionalHeaders.redelivery 格式的配置项也可以注入到Map类型的属性中。

@ConfigurationProperties + @EnableConfigurationProperties

@Bean
@ConfigurationProperties(prefix = "mail")
public ConfigProperties mailConfig() {
return new ConfigProperties();
}
@SpringBootApplication
@EnableConfigurationProperties({ConfigProperties.class})
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}

属性校验

可以给属性类上加入javax.validation.constraints.*中的注解,来对配置项进行校验。配合exceptionIfInvalid可以更早的发现问题。

最新文章

  1. Java 中一个过时的类,能够很好的统计单个字符串的次数
  2. jQuery css3鼠标悬停图片显示遮罩层动画特效
  3. shell中bc expr [ ] (( ))的使用方法
  4. Light OJ 1031---Easy Game(区间DP)
  5. .net 大文件上传注意,修改 IIS 配置
  6. Java 实现阶乘算法
  7. MySQL存储引擎【InnoDB、MyISAM、Memory】
  8. CSS3之创建透明边框三角
  9. BBED的安装及简单的使用方法
  10. 彻底理解Javascript原型继承
  11. SQL Server 性能调优培训引言
  12. 在DataTable数据类型最后增加一列,列名为“Column”,内容都为“AAA”
  13. Docker学习(1)安装
  14. UE4材质特别属生记录
  15. VMware中安装Centos 7
  16. 随GCTY
  17. python -- 判断给定的参数是否是地理位置的经度和纬度
  18. C# 运用反射把实体类反射成你所想要的格式
  19. ribbbitMq 教程,详细
  20. Ansible 远程执行命令

热门文章

  1. Python3 爬虫之 Scrapy 核心功能实现(二)
  2. 在Win10右键菜单添加校验文件Hash值命令
  3. 02 (H5*) Vue第二天
  4. 什么是App推广技术?
  5. Java方法调用的字节码指令学习
  6. 【linux】【jenkins】自动化运维七 整合sonarqube代码审查
  7. 如何编写出高质量的 equals 和 hashcode 方法?
  8. 暑期——第九周总结(1,林子雨老师关于hdfs eclipse案例报错问题【已解决】)
  9. Scala Class etc.
  10. 基于SpringBoot + Mybatis实现 MVC 项目