昨天讲述了.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/机器学习相关的知识,欢迎扫描下方的二维码,关注“梁公子的备忘录”,每天一篇相关的技术分享,期待与您一起学习,共同进步!