yml配置详解
新建springboot的时候我们发现resources文件夹下带了一个application的properties文件,但是事实上yml文件更方便,也更强大。可以用application.yml来代替它。简单语法properties的语法:key=valueyml的语法:key:空格value空格不能删去。譬如:properties:server.port=8080yml:server:port
新建springboot的时候我们发现resources文件夹下带了一个application的properties文件,但是事实上yml文件更方便,也更强大。可以用application.yml来代替它。
简单语法
properties的语法:
key=value
yml的语法:
key:空格value
空格不能删去。
譬如:
properties:
server.port=8080
yml:
server:
port: 8080
配置对象
yml还可以配置对象,并且通过一些注解来注入到bean中。
student:
name: zhangsan
age: 20
或者:
student: {name: zhangsan,age: 20}
还可以配置日期:
birth: 2021/5/14
用util下的date类接收即可。
还可以配置数组:
subjects:
-Chinese
-English
-Maths
或者:
subjects: [Chinese,English,Maths]
还可以配置map(Map<String,Object>):
maps: {k1: v1,k2: v2}
yml对空格的要求很严格,同一级的配置前面要空出相同的空格。
如果要把配置直接注入到组件中,遵循如下步骤:
1.在实体类中加上@Component组件,把它设置成一个组件,并写出它的getter和setter以及构造函数(有参与无参)。(如果有@Data注解就不用写getter和setter了)
Extra:在要注入的字段上面加上注解@Value("…"),项目就能实现自动装配了,不过这样就用不上yml了,而且比较麻烦。
2.配置正确的yml文件,例如:
student:
name: zhangsan
age: 20
graduatedOrNot: false
birth: 2021/5/14
maps: {k1: v1,k2: v2}
lists:
-a
-b
-c
pen:
len: 20
price: 2
3.在实体类下加上注解@ConfigurationProperties(prefix = “student”)
prefix中的内容就是yml文件的根,而且请用小写。
彩蛋:笔者在使用yml中触发了user.name这个系统属性,这导致了user类中的name字段一直是"sn"(sn是电脑名),yml中不管修改成什么值都不变。笔者被迫将user改成了user1,解决了该问题。
额外功能
student:
age: ${random.int}
name: ${random.uuid}_student
pen:
price: ${student.age:20}
前两个占位符用于生成随机字符串、数字,后面一个的含义是,假如student的age有配置,则使用之,否则使用20来作为默认值。
yml也支持松散绑定,即yml中为first-name,那么对应了java中的firstName。(驼峰)
在配置的时候也可以用JSR303校验,即注入bean的时候加一层过滤器,保证数据的合法。
在被注入的类上加入注解@Validated,就可以实现在注入的时候进行数据验证。
譬如,在email变量上加上注解@Email(message=“错误信息”),那么再注入的时候就会自动判断是不是email的格式。
使用前请导入如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
@Component
@ConfigurationProperties(prefix = "user1")
@Validated
@Data
public class User {
int id;
String name;
@Email(message="wrong")
String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
public User() {
}
}
常用的验证注解有:
注解 | 含义 |
---|---|
@Null | 必须是null |
@NotNull | 必须不是null |
@AssertTrue | 必须是true |
@AssertFalse | 必须是false |
@Min(value) | 必须大于等于value |
@Max(value) | 必须小于等于value |
@Size(min,max) | 必须在范围中 |
@Pattern(value) | 必须符合正则表达式 |
必须是电子邮件 | |
@Length(min,max) | 字符串长度在范围中 |
@NotEmpty | 字符串必须非空 |
@Past | 判断日期必须在过去 |
@Future | 判断日期必须在未来 |
多环境配置
可以在如下四个位置添加配置文件:
file:./config/
file:./
classpath:/config/
classpath:./
优先级如下:
不是说四个yml不能同时存在,而是指如果这几个yml中有相同的配置,则依照优先级。
如果我们想配置不同环境下的配置文件,我们可以只在一个yml文件中配置,用—来隔开。
spring:
profiles:
active: prod
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: test
---
server:
port: 8084
spring:
profiles: prod
更多推荐
所有评论(0)