1、application.properties 和 application.yml 配置文件格式区别1.1 文件格式application.properties
# 端口号server.port=8096
application.yml
# 服务端口server:port: 8096
1.2 区别
- properties的优先级高于yml,同等配置,高优先级会覆盖低优先级,不同的配置时互补配置(增补 , 不管哪个配置文件中有,都可以生效);
- properties的核心语法是:通过 . 作为层级分隔符 , 配置值是用 =,比如 server.port=9096yml的核心语法是:通过层级+缩进的方式,同一给等级 , 缩进是相同的,配置使用key: value方式
- server:port: 8096#注意值前面必须有空格
- 小结: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.com
2.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: root
2.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运行结果:文章插图
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;}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- .NET 采用 SkiaSharp 生成二维码和图形验证码及图片进行指定区域截取方法实现
- 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素
- Nebula Graph介绍和SpringBoot环境连接和查询
- AVX图像算法优化系列二: 使用AVX2指令集加速查表算法。
- springboot 多线程的使用
- 军棋的暗棋怎么玩要详细(二人军棋暗棋翻棋方法)
- springboot H2 linux下搭建使用
- AgileBoot - 基于SpringBoot + Vue3的前后端快速开发脚手架
- SpringBoot-JavaMailSender接口实战
- 一 SpringBoot - SpringBoot 初识