新建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)必须符合正则表达式
@Email必须是电子邮件
@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
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐