springboot配置——yaml,@Value与@ConfigurationProperties用法和区别

1.yaml 以数据为中心

yaml

server:
	port:8080

xml:

<server>
	<port>8080</port>
</server>

2.基本语法:

Key:空格Value
以空格来控制层级关系
属性和值区分大小写

3.值的写法:

 字符串默认不加引号
 双引号:不转义字符串中的特殊字符,特殊字符就会产生其该有的效果
 单引号:转义字符串,一视同仁,全是字符串,没有特殊

对象的写法:
K: V
dog: name: xiaobai age: 2
行内写法:```dog:{name: xiaobai,age: 2}

数组写法(List,set):
	语法:(减空格值)
		- 值
dog:
	- xiaobai
	- xiaohei
	- xiaohuang

行内写法:dog: [xiaobai,xiaohei,xiaohuang]

4.配置文件注入方式:

首先
使用@ConfigurationProperties标注需要配置的实体类
可能会出错,
加入依赖:

org.springframework.boot
spring-boot-configuration-processor
true

之后如果ConfigurationProperties继续报错:Not registered via @EnableConfigurationProterties or marked as……
解决办法:加上@Component注解

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private int age;
    private String kind;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getKind() {
        return kind;
    }

    public void setKind(String kind) {
        this.kind = kind;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", kind='" + kind + '\'' +
                '}';
    }
}

配置文件:

person:
  name: 狗子
  age: 12
  kind: 狗

使用@Value注入属性的值:
“”字面量
${}可以获取环境变量和配置文件中的值
#{}是spEl即spring的EL表达式

@Component
//@ConfigurationProperties(prefix = "person")
public class Person {
    @Value("${person.name}")
    private String name;
    @Value("#{2*10}")
    private int age;
    @Value("狗子")
    private String kind;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getKind() {
        return kind;
    }

    public void setKind(String kind) {
        this.kind = kind;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", kind='" + kind + '\'' +
                '}';
    }
}

5.@Value和@ConfigurationProperties比较


前者不支持批量注入配置文件中的属性,不支持松散语法绑定,支持SpEL语法,不支持JSR303校验

#@Value@ConfigurationProperties
功能一个个指定支持批量注入配置文件中的属性
松散语法绑定不支持支持
spEL语法不支持支持
JSR303校验不支持支持
复杂类封装不支持支持

综上所述,
如果只是在某个业务逻辑中需要配置文件中的值,使用@Value足矣
如果专门编写一个javaBean来和配置文件进行映射,就是用强大的@ConfigurationProperties

6.配置文件注入数据校验:

类上加@Validated

@Validated
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String name;
    private int age;
    private String kind;
    @Email
    private String email;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getKind() {
        return kind;
    }

    public void setKind(String kind) {
        this.kind = kind;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", kind='" + kind + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值