优雅读取yml中的属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优雅读取yml中的属性相关的知识,希望对你有一定的参考价值。
参考技术A 我们知道@Value可以读取yml中的属性,但每个地方都要写一遍,显得很笨重。使用@ConfigurationProperties(prefix=web.api)注解,可以将属性与对象映射起来。并且自动支持yml属性的横线转驼峰格式。
有的地方我们不希望通过@Autowire注解引入配置,我们可以在配置文件中添加static方法,则直接可以通过“类名.方法名”的方式获取配置。但前提是需要修改set方法,让程序在启动时提前给静态成员赋值。
读取yml配置文件中的值
1.yml文件
person: lastName: hello age: 18 boss: false birth: 2017/12/12 maps: {k1: v1,k2: 12} lists: - lisi - zhaoliu dog: name: 小狗 age: 12
2.javaBean
/** * 将配置文件中配置的每一个属性的值,映射到这个组件中 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定; * prefix = "person":配置文件中哪个下面的所有属性进行一一映射 * * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能; * */ @Component @ConfigurationProperties(prefix = "person") public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog;
}
3.pom.xml导入依赖
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
注:这里可能需要启动一下项目,使之生效
4.@value 注解获取yml配置文件中的数据,以及@Validated进行数据校验
@Component //@ConfigurationProperties(prefix = "person") @Validated public class Person { /** * <bean class="Person"> * <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property> * <bean/> */ //lastName必须是邮箱格式 @Email @Value("${person.last-name}") private String lastName; @Value("#{11*2}") private Integer age; @Value("true") private Boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog;
5.@ConfigurationProperties(prefix = "person") 和 @value的区别
| | @ConfigurationProperties | @Value |
| ---------- | ------------------------ | ------ |
| 功能 | 批量注入配置文件中的属性 | 一个个指定 |
| 松散绑定(松散语法) | 支持 | 不支持 |
| SpEL | 不支持 | 支持 |
| JSR303数据校验 | 支持 | 不支持 |
| 复杂类型封装 | 支持 | 不支持 |
6.总结
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
以上是关于优雅读取yml中的属性的主要内容,如果未能解决你的问题,请参考以下文章
logback-弹簧。无法从 application.yml 读取属性值