二 SpringBoot - 核心配置文件

1、application.properties 和 application.yml 配置文件格式区别1.1 文件格式application.properties
# 端口号server.port=8096application.yml
# 服务端口server:port: 80961.2 区别

  1. properties的优先级高于yml,同等配置,高优先级会覆盖低优先级,不同的配置时互补配置(增补,不管哪个配置文件中有,都可以生效);
  2. properties的核心语法是:通过 . 作为层级分隔符,配置值是用 = ,比如 server.port=9096yml的核心语法是:通过层级+缩进的方式,同一给等级,缩进是相同的,配置使用key: value方式
    • server:port: 8096#注意值前面必须有空格
  3. 小结:yml格式配置,可以简化配置内容,层次清晰,更适合作为核心配置文件;
2、自定义配置2.1 配置信息 yml 语法注意:值前面必须有空格;
2.1.1 基本类型数据user:userId: kh96user-Name: gala # 支持松散绑定user_age: 17adult: true # 是否成年salary: 9696.0userTel: 13501020304birthday: 2002/10/11 10:10:10email: kh96@163.com2.1.2数组,List,Setuser: hobbies:# 爱好 list集合- springboot- linux- mysql- ssm- jvaweb- springvloud#行内写法#hobbies:[springboot,linux,mysql,ssm,jvaweb,springvloud]2.1.3 Mapuser: carMap:# 爱车 map 集合bnm: 宝马325audi: 奥迪A41benz: 奔驰C200#行内写法#carMap:{bnm: 宝马325;audi: 奥迪A41;benz: 奔驰C200}2.1.4 实体参数user:userRole:role-id: R96 ${random.uuid} #${}可以去一些内置的自定义参数role_name: root2.1.5 值的写法2.1.5.1 单引号:会转义特殊字符 。
user: msg: '你好!\n小可爱!'输出:
你好!\n小可爱!2.1.5.2 双引号:不会转义字符里的特殊字符,特殊字符仍然是本身的意思
user: msg: "你好!\n小可爱!"输出:
你好!小可爱!2.2 获取 配置信息2.2.1 批量自动读取使用注解@ConfigurationProperties(prefix = "xxx") ,必须配合@Component 注解获取在核心启动类上使用 @EnableConfigurationProperties(配置属性读取类.class)使用;
特点:支持松散绑定(可以自动识别驼峰,-,_),支持复杂类型绑定(实体,集合-list,set,array,map等),支持数据格式校验;
@Component + @ConfigurationProperties(prefix = "user")或@Component+@EnableConfigurationProperties(UserProperties.class) //写在主启动类上2.2.1.1 UserProperties@Data@Component //第一个写法,使用普通组件@ConfigurationProperties(prefix = "user")//不能单独使用,必须配合@EnableConfigurationProperties 或指定为spring容器中的普通组件public class UserProperties {//用户编号private String userId;//用户名private String userName;//用户年龄private Integer userAge;//是否成年private boolean adult;//工资privatedouble salary;//联系方式private String userTel;//生日@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") //springMVC将将数据转成json格式,时间格式规则private Date birthday;//用户角色private UserRole userRole; //实体参数//爱好private List<String> hobbies;//爱车private Map<String,String> carMap;//邮箱@Email //邮箱格式校验private String email;}2.2.1.1.2运行结果:
二 SpringBoot - 核心配置文件

文章插图
2.2.2 单个手动读取用法:使用注解@Value("${xxx.xxx}");
特点:写法灵活,可以指定默认值等,但是不支持松散绑定,单个读取的配置要求指定的读取属性key必须和自定义配置一直,否者报错;
@Component + @ConfigurationProperties(prefix = "user")2.2.2.1 UserProperties@Data@Component@PropertySource(value = "https://www.huyubaike.com/biancheng/classpath:user.properties")//@EnableConfigurationProperties(UserProperties.class) //第二种方式,核心启动类上,增加指定开启自动配置读取,但是一般不怎么使用,且容易忘记public class UserProperties {//用户编号@Value("${user.userId}")private String userId;//用户名@Value("${user.user-Name}")private String userName;//昵称 @Value("#{userValues.userName}") //获取的是容器中已有的实体的值 //@Value("#{'xiaoming'}") //可以赋默认值private String niceName;//用户年龄@Value("${user.user_age}")//@Value("16") //直接赋值private Integer userAge;//是否成年@Value("#{(${user.user_age}>17)?true:false}") //spel 表达式private boolean adult;//工资@Value("#{${user.salary}*10}")//#{} 和 ${}套用privatedouble salary;//联系方式@Value("${user.userTel}")private String userTel;//生日@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") //springMVC将将数据转成json格式,时间格式规则@Value("${user.birthday}")private Date birthday;//用户角色//@Value("${user.userRole}")//不可以单个手动获取石参数private UserRole userRole; //实体参数//爱好//@Value("${user.hobbies}") //不可以单个手动获取复杂参数private List<String> hobbies;//爱车//@Value("${user.carMap}")private Map<String,String> carMap;//邮箱@Email //邮箱格式校验@Value("${user.email:abc@kgc.com}") //添加默认值,配置信息没有就使用默认值private String email;}

经验总结扩展阅读