Spring Boot组件与配置文件绑定

本文详细介绍了Spring Boot中使用@ConfigurationProperties和@Value注解进行配置文件属性绑定的方法,包括批量注入、松散绑定、SpEL支持、JSR303数据校验及复杂类型封装。比较了两者的功能差异,帮助开发者选择合适的配置方式。
使用@ConfigurationProperties(prefix = “”)配置。

application.yml:

server:
  port: 8081

person:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2019/08/20
  maps: {k1: v1,k2: v2}
  lists:
    - lisi
    - zhaoliu
  dog:
    name: 小狗
    age: 2

javaBean:

/**
 * 将配置文件中的每一个属性值映射到组件中
 * @ConfigurationProperties:
 *          告诉SpringBoot将本类中的所有属性和配置文件中相关配置进行绑定
 *          只有这个组件是容器中的组件,才能使用提供的@ConfigurationProperties注解
 */
@ConfigurationProperties(prefix = "person")
@Component
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;
    ···

可以导入配置文件处理器,配置文件绑定就会有提示:

<!--配置配置文件处理器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
使用@Value("")注解

字面量:${key} #{SpEL}
application.properties:

#server.port=8081

#idea的properties配置文件默认使用Utf-8
#映射person属性
person.last-name=张三
person.age=19
person.birth=2019/08/20
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=2

javaBean:

@Component
public class Person {

    @Value("${person.last-name}")
    private String lastName;
    @Value("#{11*2}")
    private Integer age;
    ···
两者对比:
@ConfigurationProperties@Value
功能批量注入配置文件中的属性分别注入
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持

注:
松散语法为:@Value("${person.last-name}")
JSR303校验为:

@Validated
public class Person {

	@Email
	private String email;
	···

若只是在某个业务逻辑中获取配置文件中的某个属性值,则使用@Value;
若专门编写了一个javaBean与配置文件进行映射,则使用@ConfigurationProperties。

配置文件注入值数据校验

使用@Validated属性即可,代码如上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值