SpringBoot配置-@ConfigurationProperties与@Value

昨天讲述了.yml配置文件的语法格式,开始今天的内容之前,首先再简要讲述一下.properties配置文件的语法格式。以昨天的配置信息为例,如果将其转化为.properties文件,那么其一般格式应该为:

server.port = 8081
staff.name = LiMing
staff.age = 28
​staff.birth = 1990/12/5
staff.list = Tom,Mike,Alice
staff.manager = false
staff.map.k1 = spring
staff.map.k2 = 2019
staff.salary.baseSalary = 15000
staff.salary.bonus = 35000

获取值的注解除了@ConfigurationProperties(prefix = “staff”)外,还可以使用@Value("${.propreties}")。结合上述.properties文件,那么staff.java文件源码为:

package com.springbootlearning.springbootapplication.bean;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.util.Date;
import java.util.List;
import java.util.Map;@Component
//@ConfigurationProperties(prefix = "staff")
public class Staff {
    @Value("${staff.name}")
    private String name;
    @Value("#{7*4}")
    private int age;
    @Value("${staff.birth}")
    private Date birth;
    @Value("true")
    private Boolean manager;
    private Map<String,Object> map;
    private List<Object> list;
    private Salary salary;
    ......
    ......

省略部分内容和前述代码一致,注意,使用@Value时,大括号内的内容不要增加多余的空格,否则会报错。测试信息运行如下:

staff{name='LiMing', age=28, birth=Wed Dec 05 00:00:00 CST 1990, manager=true, map=null, list=null, salary=null}

Intelli IDEA在注释大段代码的时候可以使用快捷键command+"/",这一快捷键可以快速注释、取消注释大段代码。@ConfigurationProperties和@Value的区别如下:

​功能 @ConfigurationProperties ​@Value
注入数据方式 批量注入 单独指定
松散语法规则 支持 不支持
JSR303(Bean Validation) 支持 不支持
Spring表达式语言 不支持 支持
复杂类型数据封装 支持 不支持

最后一行含义是,不能使用@Value来注入诸如Maps格式的数据。因此,如果只是在某个业务中获取某项值,那么可以使用@Value,否则应使用@ConfigurationProperties来映射配置文件。这里再通过一个简单的示例程序介绍一下JSR303(Bean Validation)数据校验。我们将staff.java进行简单的修改,要求员工姓名必须为邮箱格式,源码如下:​

package com.springbootlearning.springbootapplication.bean;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map;@Component
@ConfigurationProperties(prefix = "staff")
@Validated
public class Staff {
    @Email
    private String name;
    private int age;
    private Date birth;
    private Boolean manager;
    private Map<String,Object> map;
    private List<Object> list;
    private Salary salary;
    ......
    ......

如果.properties文件不做修改,程序将会报错​,校验功能已经实现。将​staff.name修改为:

staff.name = LiMing@126.com

​程序运行结果如下:

staff{name='[email protected]', age=28, birth=Wed Dec 05 00:00:00 CST 1990, manager=false, map={k1=spring, k2=2019}, list=[Tom, Mike, Alice], salary=Salary{baseSalary=15000, bonus=35000}}

注意数据校验功能只能使用@ConfigurationProperties​。
全文完。

如果您想了解更多C++/Java/机器学习相关的知识,欢迎扫描下方的二维码,关注“梁公子的备忘录”,每天一篇相关的技术分享,期待与您一起学习,共同进步!

在这里插入图片描述

你可能感兴趣的:(SpringBoot)