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
相关推荐
咩咩啃树皮7 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚8 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白9 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司10 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地11 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415911 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风14 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
隔窗听雨眠14 小时前
Spring Boot在云原生时代的编程范式革新研究
spring boot·后端·云原生
z1234567898614 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin52112315 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python