@ConfigurationProperties使用方法

基本使用

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "db.mysql.stock")
public class DBConfig {

    private String url;
    private String username;
    private String password;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "DBConfig{" +
                "url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
db.mysql.stock.url = jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
db.mysql.stock.username = tim
db.mysql.stock.password = 123456

@ConfigurationProperties使用非常简单,就是自动为属性注入配置值。

@ConfigurationProperties会加载路径中的所有属性文件,所以配置的时候要注意是否会有覆盖问题。

更通用的方式是与@Configuration使用在配置类上:

@Configuration
@ConfigurationProperties(prefix = "db.mysql.stock")
public class DBConfig {
}

绑定规则

hostName = 127.0.0.1
hostname = 127.0.0.1
host_name = 127.0.0.1
host-name = 127.0.0.1
HOST_NAME = 127.0.0.1

@ConfigurationProperties做了很多兼容处理,所以上面的这些都能绑定到hostName这个名称的字段上,不过我们还是应该尽量统一规范。

ignoreInvalidFields

绑定属性的时候遇到非法字段怎么处理?

比如一个一个Integer类型的字段,配置的却是Hello,将会怎么样?

默认是抛出异常,可以设置ignoreInvalidFields为true

@ConfigurationProperties(prefix = “db.mysql.stock”,ignoreInvalidFields = true)

ignoreUnknownFields

如果有未知属性怎么办?

默认是忽略这个属性,有些时候比较特殊的属性是不能随便忽略的,就需要将ignoreUnknownFields设置为false

@ConfigurationProperties(prefix = “db.mysql.stock”,ignoreUnknownFields = false)

绑定列表

如果字段是个list怎么绑定?

private List servers;

tool.servers[0]= 192.168.10.5
tool.servers[1]= 192.168.10.6

绑定map

tool.config[k1] = v1
tool.config[k2] = v2
tool.config[k3] = v3

tool.user[k1].name = tim
tool.user[k1].phone = 13777777777

原理

主要通过ConfigurationPropertiesBindingPostProcessor对Bean进行修改,ConfigurationPropertiesBindingPostProcessor,继承了BeanPostProcessor。

BeanPostProcessor可以在bean对象调用init-method方法的前后进行修改。

具体实现可以看ConfigurationPropertiesBinder。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值