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
相关推荐
明天也要努力学习5 分钟前
深入理解 JVM 垃圾回收(GC)
java·jvm
golang学习记12 分钟前
IDEA 断点调试技巧:拖拽
java·ide·intellij-idea
Sayai14 分钟前
Flink 日志解析任务性能优化实战:正则/Grok 预编译、Guava 缓存权重陷阱与 ES 写入隔离
java·大数据·性能优化·flink·实时计算
计算机毕设定制辅导-无忧学长16 分钟前
《基于物品协同过滤的闲置书换购微信小程序设计开发》
java·vue.js·spring boot·微信小程序·uniapp·闲置书换购微信小程序·物品协同过滤算法
Best_Liu~17 分钟前
SpringBoot全局日期格式化
java·spring boot·后端
少年的范儿27 分钟前
IntelliJ IDEA 配置 JDK 21 与 Maven 教程(Windows):开发环境配置与验证
java·jdk·maven·intellij idea
RuoyiOffice29 分钟前
SpringBoot3 + openGauss:RuoYi Office 登录、流程发布与用印填报适配实战
java·数据库·spring boot·opengauss·信创
Dwzun1 小时前
基于SpringBoot3+Vue3的油莎豆种植管理系统
java·前端·vue.js·spring boot·后端·python·计算机网络
学长毕设9 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw11 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp