yaml

什么是yaml

SpringBoot 使用了一个全局的配置文件,配置文件名称是固定的。

  • application.properties
    • 语法结构:key=value
  • application.yaml
    • 语法结构:key:空格value

配置文件的作用:修改 SpringBoot 自动配置的默认值。

yaml 语法

# 类似python,对缩进的要求十分严格
# yaml 可以注入到配置类中

# 存取普通的键值对
name: henjie

# 存取对象
student:
  name: henjie
  age: 23

# 行内写法
student1: {name: henjie,age: 23}

# 数组写法
Animal:
  - Dog
  - Cat

# 数组行内写法
Animal1: [cat,dog]
  • yaml 可以直接给实体类赋值

4.1 为实体类赋值

创建实体类

创建Dog 和 Person 两个实体类

实体类上添加注解@ConfigurationProperties

在这里插入图片描述

如果没有配置,就没有提示,会报红,但是不影响程序的正常使用

配置方式导入依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

依赖导入后,需要重启IDEA,便不会报红,且会有提示

@Component	//将实体类注册到Spring组件(bean)中
@Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private boolean happy;
    private Date brith;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}
  • @ConfigurationProperties 作用:
    • 将配置文件中配置的每一个属性的值,映射到这个组件中
    • 告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定
    • 参数prefix = “person” :将配置文件中的person下面所有的属性一一对应
    • 只有这个类被注册到容器中成为了组件,才可以使用容器提供的此注解

配置yaml

Person:
  name: 恨劫
  age: 24
  happy: true
  birth: 1997/8/25
  maps: {k1: v1,k2: v2}
  lists:
    - code
    - music
    - girl
  dog:
    name: 阿黄
    age: 3

测试

@SpringBootTest
class ConfigApplicationTests {
    @Autowired // 自动装配
    private Person person;
    @Test
    void contextLoads() {
        System.out.println(person);
    }
}

输出:

Person(name=恨劫, age=24, happy=true, brith=null, maps={k1=v1, k2=v2}, lists=[code, music, girl], dog=Dog(name=阿黄, age=3))

4.2 SpEL 表达式

修改yaml

person:
  name: 恨劫
  age: ${random.int}	# el表达式,生成一个随机数
  happy: true
  birth: 1997/8/25
  maps: {k1: v1,k2: v2}
  #hello: 大
  lists:
    - code
    - music
    - girl
  dog:
    name: ${person.hello:hello}_黄	# 如果变量hello存在则显示变量的值,不存在则显示hello_黄
    age: 3

结果呈现

没有hello变量的情况

Person(name=恨劫, age=262138562, happy=true, brith=null, maps={k1=v1, k2=v2}, lists=[code, music, girl], dog=Dog(name=hello_黄, age=3))

有hello变量的情况

Person(name=恨劫, age=262138562, happy=true, brith=null, maps={k1=v1, k2=v2}, lists=[code, music, girl], dog=Dog(name=大_黄, age=3))

4.3 JSR303 校验

导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

设置数据校验

@Validated //开启数据校验
public class Person {
    @Email  // 标注数据校验注解后,可以对属性设置相应的格式校验。
    private String name;
}

@Validated开启数据校验

@Email 设置name属性为email格式的校验。

执行测试

Property: person.name
Value: 恨劫
Origin: class path resource [application.yaml] - 2:9
Reason: 不是一个合法的电子邮件地址
  • 出现报错,要求name的格式必须是一个电子邮件

可以修改报错的消息

@Email(message = "邮箱格式错误")

再次测试:

Property: person.name
Value: 恨劫
Origin: class path resource [application.yaml] - 2:9
Reason: 邮箱格式错误

4.4 配置文件位置

file:./config/ file 指项目路径,也就是springboot-02-config 优先级最高

在这里插入图片描述

file:./ 也就是项目的根目录下直接创建 优先级其次

在这里插入图片描述

classpath:/config/类路径下的config,就是java或者resources两个目录,一般是resources 优先级再次

在这里插入图片描述

classpath:/就是默认创建的位置 优先级最低

在这里插入图片描述

4.5 多环境配置

使用 properties 配置

在这里插入图片描述

# springboot 多环境配置:可以选择激活哪一个配置文件
spring.profiles.active=dev

使用 yaml 配置

server:
  port: 8081
spring:
  profiles:
    active: dev		# 激活名为 dev 的配置文件 
---					# 配置文件之间的分割
server:
  port: 8082
spring:
  profiles: dev		# 为配置文件命名

---
server:
  port: 8083
spring:
  profiles: test
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值