欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot配置[email protected]与@Value

程序员文章站 2022-04-19 22:34:30
...

昨天讲述了.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配置[email protected]与@Value

相关标签: SpringBoot