Spring Boot application.yml 核心配置

Spring Boot 的整体结构、配置体系与属性源优先级链,见 Spring Boot 主脉络
配置项在企业级项目中的分层组织、多数据源与敏感配置处理实践,见 企业级项目实践指导手册

一、application.yml 核心定位

application.yml是Spring Boot的核心配置文件(YAML格式),用于替代传统的application.properties。相比properties文件,它的层级结构更清晰、语法更简洁。

主要作用:
- 配置Spring Boot应用的核心参数(如端口、上下文路径、日志级别)
- 覆盖框架/第三方依赖的默认配置(如数据库连接、MyBatis、Redis等)
- 定义自定义业务配置(如接口超时时间、文件存储路径)
- 支持多环境配置(开发、测试、生产环境区分)

application.yml 中的属性最终通过 Environment 抽象和 BeanFactoryPostProcessor 机制注入到 Spring 容器中,底层实现见 Spring Framework 核心体系


二、YAML 基础语法

YAML是一种层级化的键值对配置格式,核心语法规则如下:

语法规则 示例 说明
层级缩进 server:
port: 8080
用空格缩进表示层级(禁止用Tab),通常2个空格为一级
键值对 name: "张三" 键和值之间用:分隔,冒号后必须加1个空格
字符串 str1: hello(无需引号)
str2: "hello\nworld"(转义生效)
字符串默认无需引号;加双引号可识别转义字符,单引号会原样输出
列表/数组 list:
- apple
- banana
-表示列表元素,每个元素占一行且缩进相同
嵌套对象 user:
name: 张三
age: 20
层级缩进表示嵌套对象
注释 # 这是注释 #开头的行是注释,不会被解析
布尔值 enable: true / enable: false 支持true/false(大小写不敏感,TRUE/FALSE也可)
数字 port: 8080 / rate: 0.85 整数、浮点数直接写,无需引号

三、application.yml 核心配置示例

# ============================================================
# 1. 基础应用配置
# ============================================================
spring:
  # 应用名称(用于日志、监控等标识)
  application:
    name: agbank-controller
  
  # 环境配置(对应多环境:dev/test/prod)
  profiles:
    active: dev  # 激活dev环境配置

# ============================================================
# 2. 服务器配置
# ============================================================
server:
  # 端口号(默认8080)
  port: 8081
  
  # 上下文路径(访问前缀,默认/)
  # 配置后访问地址:http://localhost:8081/agbank/xxx
  servlet:
    context-path: /agbank
  
  # Tomcat配置(仅当使用Tomcat容器时生效)
  tomcat:
    max-threads: 200              # 最大线程数
    connection-timeout: 30000     # 连接超时时间(毫秒)

# ============================================================
# 3. 日志配置
# ============================================================
logging:
  # 日志级别:root为根级别,可指定包名细化级别
  # 级别顺序:TRACE < DEBUG < INFO < WARN < ERROR
  level:
    root: INFO
    com.payment.agbank: DEBUG           # 自定义包的日志级别
    org.springframework.web: WARN       # Spring Web模块的日志级别
    com.baomidou.mybatisplus: DEBUG     # MyBatis-Plus日志级别
  
  # 日志文件存储路径
  file:
    path: ./logs
  
  # 日志格式(控制台输出)
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"

# ============================================================
# 4. 数据库配置(MySQL + Druid)
# ============================================================
spring:
  datasource:
    # 数据源类型
    type: com.alibaba.druid.pool.DruidDataSource
    
    # MySQL连接信息
    url: jdbc:mysql://localhost:3306/agbank_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    
    # Druid连接池配置
    druid:
      initial-size: 5                           # 初始化连接数
      min-idle: 5                               # 最小空闲连接数
      max-active: 20                            # 最大活跃连接数
      max-wait: 60000                           # 获取连接的最大等待时间(毫秒)
      time-between-eviction-runs-millis: 60000  # 检测空闲连接的间隔时间

# ============================================================
# 5. MyBatis-Plus配置
# ============================================================
mybatis-plus:
  # Mapper.xml文件路径
  mapper-locations: classpath:mapper/**/*.xml
  
  # 实体类包名(自动扫描)
  type-aliases-package: com.payment.agbank.model.entity
  
  # 全局配置
  global-config:
    db-config:
      id-type: ASSIGN_ID              # 主键生成策略(AUTO:自增, ASSIGN_ID:雪花算法)
      logic-delete-value: 1           # 逻辑删除字段值
      logic-not-delete-value: 0       # 逻辑未删除字段值
  
  # 配置项
  configuration:
    map-underscore-to-camel-case: true   # 开启驼峰命名转换(user_name → userName)
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 打印SQL(开发环境开启)

# ============================================================
# 6. 自定义业务配置(可通过@Value注入)
# ============================================================
biz:
  # FTP配置
  ftp:
    host: 192.168.1.100
    port: 21
    username: ftp_user
    password: ftp_pass
    base-path: /data/agbank
  
  # 接口超时配置
  timeout:
    connect: 5000   # 连接超时(毫秒)
    read: 10000     # 读取超时(毫秒)

四、多环境配置

实际开发中需要区分开发、测试、生产环境,推荐用「主配置 + 环境配置」的方式:

1. 创建多环境配置文件

文件 用途
application.yml 主配置(通用配置)
application-dev.yml 开发环境专属配置
application-test.yml 测试环境专属配置
application-prod.yml 生产环境专属配置

2. 主配置中激活对应环境

# application.yml(主配置)
spring:
  profiles:
    active: dev  # 激活开发环境,打包时改为 prod/test

3. 环境配置示例(application-dev.yml

# 开发环境:端口8080,日志级别DEBUG,数据库用本地库
server:
  port: 8080

logging:
  level:
    com.payment.agbank: DEBUG

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/agbank_dev?useSSL=false
    username: root
    password: 123456

五、配置注入到代码的方式

方式1:@Value(单个配置项)

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class FtpConfig {
    
    // 注入单个配置项
    @Value("${biz.ftp.host}")
    private String ftpHost;
    
    // 冒号后为默认值(配置不存在时使用)
    @Value("${biz.ftp.port:21}")
    private Integer ftpPort;
    
    // getter/setter
}

方式2:@ConfigurationProperties(批量配置项)

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "biz.ftp")
public class FtpConfig {
    private String host;
    private Integer port;
    private String username;
    private String password;
    private String basePath;
    
    // 必须自动生成getter/setter,否则无法绑定
}

六、常见注意事项

注意事项 说明
缩进规范 必须用空格缩进(2个空格),禁止用Tab,否则会解析失败
编码格式 配置文件需保存为UTF-8编码,否则中文会乱码
配置优先级 命令行参数 > 环境变量 > 应用内配置文件 > 外部配置文件
敏感配置 生产环境的密码、密钥等敏感信息不要直接写在配置文件中,建议用Spring Cloud Config、Nacos或环境变量注入
配置校验 可添加spring-boot-starter-validation依赖,结合@Validated校验配置项(如端口范围、非空等)

七、总结

  1. application.yml是Spring Boot的核心配置文件,采用YAML层级语法,比properties更简洁易读
  2. 核心用法:配置应用基础参数、第三方依赖(数据库/MyBatis等)、自定义业务参数,支持多环境隔离
  3. 配置注入推荐@ConfigurationProperties(批量绑定)优于@Value(单个绑定),更易维护