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
相关推荐
凯瑟琳.奥古斯特2 小时前
操作系统核心结构解析
java·开发语言·c++·python·职场和发展
ZC跨境爬虫2 小时前
跟着 MDN 学CSS day_2:(连接样式表与选择器的实战艺术)
java·前端·css·ui·html·媒体
敖正炀2 小时前
AQS-钩子方法
java
霸道流氓气质2 小时前
Spring AI 结构化输出 Agent 实战:让大模型返回精准 JSON
人工智能·spring·json
郭郭的柳柳在学FPGA2 小时前
千兆以太网@——帧格式
java·开发语言·网络
真恋寄语枫秋3 小时前
【Java零基础入门20】Java Stream流超全详解:中间操作、终结操作、集合数据处理
java
段ヤシ.3 小时前
回顾Java知识点,面试题汇总Day10(持续更新)
java·开发语言·spring
Dicky-_-zhang3 小时前
Elasticsearch聚合查询优化实战
java·jvm