application.yml文件用来做什么

以下内容来自豆包,只做记录。

在 Spring Boot(或 Spring 生态项目)中,application.yml 是核心配置文件,用于集中管理项目的所有配置信息,替代了传统 Spring 中繁琐的 XML 配置(如 applicationContext.xml),支持更简洁的 YAML 语法,实现 “配置与代码分离”,方便项目在不同环境(开发、测试、生产)中快速切换。

一、核心作用:统一管理配置

application.yml 的核心目标是将项目中所有需要动态调整的参数(如数据库连接、服务端口、第三方接口地址等)从代码中抽离,集中配置,避免硬编码带来的维护成本。
例如:无需修改代码,只需修改配置文件,即可切换数据库环境、调整日志级别、启用 / 禁用功能等。

二、常见配置场景

以下是 application.yml 典型的配置内容,覆盖项目开发的核心场景:

1. 服务器基础配置
# 服务器端口(默认8080,可自定义)
server:
  port: 8081
  # 上下文路径(访问路径前缀,如 http://localhost:8081/api/xxx)
  servlet:
    context-path: /api
  # 连接超时时间
  connection-timeout: 5000ms
2. 数据库配置(以 MySQL 为例)
# 数据源配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/my_db?useSSL=false&serverTimezone=UTC
    username: root
    password: 123456
    # 连接池配置(如 HikariCP,Spring Boot 默认)
    hikari:
      maximum-pool-size: 10  # 最大连接数
      minimum-idle: 5        # 最小空闲连接数
      idle-timeout: 300000ms # 空闲连接超时时间
3. 框架特性配置(如 MyBatis、Spring MVC)
# MyBatis 配置
mybatis:
  mapper-locations: classpath:mapper/**/*.xml  # Mapper 映射文件路径
  type-aliases-package: com.example.entity     # 实体类包路径
  configuration:
    map-underscore-to-camel-case: true        # 开启下划线转驼峰(如 user_name → userName)

# Spring MVC 配置(如静态资源、日期格式化)
spring:
  mvc:
    static-path-pattern: /static/**  # 静态资源访问路径
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss # 全局日期格式化
    time-zone: GMT+8                 # 时区配置
4. 日志配置(关联 Logback)
# 日志级别配置(覆盖 logback-spring.xml 的部分配置)
logging:
  level:
    root: INFO  # 全局日志级别
    com.example.service: DEBUG  # 特定包的日志级别(服务层 debug 便于调试)
    org.mybatis: INFO           # MyBatis 日志级别
  file:
    name: logs/my-app.log  # 日志文件路径(若未在 logback 中配置,可在此指定)
5. 多环境配置(配合 profiles)

Spring Boot 支持通过 spring.profiles.active 切换环境,application.yml 可指定默认激活的环境,或直接在配置中区分环境:

# 1. 指定默认激活的环境(开发环境)
spring:
  profiles:
    active: dev  # 激活 application-dev.yml 配置

# 2. 直接在同一个文件中定义多环境(用 --- 分隔)
---
# 开发环境配置(profile=dev)
spring:
  profiles: dev
datasource:
  url: jdbc:mysql://localhost:3306/dev_db

---
# 生产环境配置(profile=prod)
spring:
  profiles: prod
datasource:
  url: jdbc:mysql://prod-server:3306/prod_db
  username: prod_user
  password: ${PROD_DB_PASSWORD}  # 引用系统环境变量(避免明文密码)
6. 自定义业务配置

除了框架和服务器配置,还可在 application.yml 中定义业务相关的自定义参数,通过 Spring 的 @Value 注解或 @ConfigurationProperties 注入到代码中:

# 自定义业务配置
app:
  name: user-service  # 服务名称
  version: 1.0.0      # 服务版本
  third-party:
    payment-url: https://api.payment.com/v1  # 第三方支付接口地址
    timeout: 3000ms                          # 接口超时时间

代码中注入使用:

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

@Component
public class AppConfig {
    // 注入自定义配置
    @Value("${app.name}")
    private String appName;
    
    @Value("${app.third-party.payment-url}")
    private String paymentUrl;
    
    // getter/setter
}

三、与 application.properties 的区别

Spring Boot 支持两种主流配置文件格式:application.yml(YAML 格式)和 application.properties(Properties 格式),核心功能一致,仅语法不同:

特性application.yml(YAML)application.properties(Properties)
语法缩进敏感(用空格缩进,无分号),结构清晰键值对格式(key=value),层级用 . 分隔
可读性高(尤其适合复杂层级配置,如多环境)低(层级深时键名过长,如 spring.datasource.hikari.maximum-pool-size
示例server: port: 8081server.port=8081

实际开发中,application.yml 因简洁的层级结构更受欢迎,尤其是在多环境、复杂配置场景下。

四、加载顺序与优先级

Spring Boot 加载 application.yml 的顺序有优先级(高优先级配置会覆盖低优先级),常见顺序:

  1. 命令行参数(如 java -jar app.jar --server.port=8082,优先级最高)
  2. 系统环境变量(如 Linux 的 export SPRING_PROFILES_ACTIVE=prod
  3. 项目内配置文件:application-{profile}.yml(如 application-prod.yml) > application.yml
  4. 外部配置文件(如放在服务器 /config 目录下的 application.yml

总结

application.yml 是 Spring Boot 项目的 “配置中枢”,核心价值在于:

  1. 解耦配置与代码:避免硬编码,修改配置无需改代码;
  2. 支持多环境切换:快速切换开发 / 测试 / 生产环境,无需重新打包;
  3. 简化配置:用简洁的 YAML 语法替代复杂 XML,降低维护成本;
  4. 灵活注入:支持通过注解将配置注入到代码,方便业务使用。

几乎所有 Spring Boot 项目都会以 application.yml 作为核心配置文件,是项目开发和部署的基础。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值