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校验配置项(如端口范围、非空等) |
七、总结
application.yml是Spring Boot的核心配置文件,采用YAML层级语法,比properties更简洁易读- 核心用法:配置应用基础参数、第三方依赖(数据库/MyBatis等)、自定义业务参数,支持多环境隔离
- 配置注入推荐:
@ConfigurationProperties(批量绑定)优于@Value(单个绑定),更易维护