Spring学习日记——DAY03(yml文件)

今天针对 SpringBoot 的YAML 配置文件功能展开了学习,学习内容如下:

我们在使用 SpringBoot 传统配置:使用.properties文件,格式冗余、层级不清晰,大量重复前缀需要手动编写

使用 XML 配置:标签繁琐、结构冗长,配置数据不够直观

使用SpringBoot YAML:以数据为中心,语法简洁、层级清晰,完美替代 properties 与 XML,是 SpringBoot 官方推荐的配置格式


1. YAML 相关语法介绍

1.1 基本语法规则

  • 大小写敏感
  • 使用空格缩进表示层级关系
  • key 与 value 之间必须加空格
  • 字符串默认不加引号,特殊字符需用双引号
  • 支持字面值、对象、数组、复合结构

1.2 支持数据类型

  1. 字面值:普通值(数字、字符串、布尔、日期)
  2. 对象:键值对集合
  3. 数组 / List/Set :用-表示
  4. Map:键值对格式

1.3 YAML 松弛绑定规则

SpringBoot 采用宽松绑定,以下写法均可映射到userName

  • user-name: 张三(烤肉串风格,推荐)
  • userName: 张三(驼峰)
  • user_name: 张三(下划线)
  • USER_NAME: 张三(大写,环境变量推荐)

1.4 多环境配置

命名规范:application-{profile}.yml

  • 开发:application-dev.yml

  • 测试:application-test.yml

  • 生产:application-prod.yml

    spring:
    profiles:
    active: dev


2. 实战

我们使用 YAML 完成:基础值配置、对象配置、集合配置、多环境切换、配置绑定实战。

2.1 引入依赖(配置绑定需要)

xml

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

2.2 YAML 配置文件

application.yml

复制代码
# 基础字面值
sysUser: 张三
age: 20
money: 123.45
birth: 1999/12/12

# 对象配置
com:
  xzit:
    model:
      users:
        name: 李四
        gender: 男
        age: 22
        money: 234.22
        birth: 1999/12/23

# 集合
likes:
  - 打球
  - 游泳
  - 游戏

list: [aa, bb, cc]
map:
  k1: v1
  k2: v2

# 引用与随机值
server:
  port: 8080
users:
  customer:
    url: localhost:${server.port}

teacher:
  id: ${random.uuid}
  age: ${random.int(30,50)}

2.3 实体类(YAML 绑定)

复制代码
package com.xzit.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.time.LocalDate;

@Data
@Component
@ConfigurationProperties(prefix = "com.xzit.model.users")
public class Users {
    private String name;
    private String gender;
    private int age;
    private double money;
    private LocalDate birth;
}

2.4 Controller 测试读取

方式 1:@Value 读取单个值
复制代码
package com.xzit.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;

@RestController
public class TestController {
    @Value("${sysUser}")
    private String sysUser;
    @Value("${age}")
    private int age;
    @Value("${money}")
    private double money;
    @Value("${birth}")
    private Date birth;

    @GetMapping("/show")
    public Object show(){
        return sysUser + " | " + age + " | " + money + " | " + birth;
    }
}
方式 2:绑定对象
复制代码
package com.xzit.controller;

import com.xzit.model.Users;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;

@RestController
public class UsersController {
    @Resource
    private Users user;

    @GetMapping("/user")
    public Object showYaml(){
        return user;
    }
}
方式 3:Environment 读取
复制代码
@Resource
private Environment env;

@GetMapping("/env")
public Object env(){
    return env.getProperty("sysUser") 
            + " | " + env.getProperty("com.xzit.model.users.name");
}

2.5 多环境配置演示

application-dev.yml

复制代码
server:
  port: 8080

application-prod.yml

复制代码
server:
  port: 8081

主配置激活:

复制代码
spring:
  profiles:
    active: dev

3. YAML 常用功能总结

3.1 配置文件优先级

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

3.2 自动重启排除配置

yaml

复制代码
spring:
  devtools:
    restart:
      exclude: static/**,public/**,templates/**

3.3 自定义配置文件名

启动参数指定:

plaintext

复制代码
java -jar xxx.jar --spring.config.name=myconfig
相关推荐
xujinwei_gingko3 小时前
SpringBoot整合WebSocket
spring boot·后端·websocket
wang09074 小时前
自己动手写一个spring之IOC_2
java·后端·spring
来杯@Java5 小时前
学生选课管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·maven·mybatis
invicinble5 小时前
easyexcel开发全域理解
spring boot
豆瓣鸡5 小时前
Spring Cloud笔记
spring·spring cloud
不知名的老吴6 小时前
线程的生命周期之线程“插队“
java·开发语言·python
ANnianStriver6 小时前
PetLumina-02-后端开发与前后端联调
java·ai·sa-token
云烟成雨TD6 小时前
Spring AI 1.x 系列【56】用大模型评判大模型:递归顾问实现自动化评估方案
人工智能·spring·自动化
杨了个杨89826 小时前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构