Spring Boot 配置文件详解 - application.yaml

Spring Boot 使用 application.yaml 或 application.properties 文件来配置应用程序的各种设置。相比于 application.properties,application.yaml 以更简洁和层次化的方式管理配置,特别适合复杂的配置结构。本文将详细介绍 application.yaml 的基本用法及常见配置项。

一、基本语法

YAML (YAML Ain't Markup Language) 是一种简洁的非标记语言,使用缩进表示层次关系。以下是 application.yaml 的基本语法结构:

# 注释
key: value  # 简单键值对

# 层次结构
parent:
  child1: value1
  child2: value2

# 数组
list:
  - item1
  - item2
  - item3

二、常见配置项详解

1. 应用基本信息

配置应用程序的基本信息,如名称和端口号:

spring:
  application:
    name: my-application  # 应用名称

server:
  port: 8080  # 服务器端口号

2. 日志配置

Spring Boot 默认使用 Logback 作为日志框架,可以通过 application.yaml 配置日志级别和输出格式:

logging:
  level:
    root: INFO  # 根日志级别
    com.example: DEBUG  # 指定包的日志级别
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"  # 控制台日志输出格式
  file:
    path: /var/log/my-application  # 日志文件路径

3. 数据源配置

配置数据库连接信息,包括驱动类、URL、用户名和密码:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      minimum-idle: 5
      maximum-pool-size: 20
      idle-timeout: 30000
      pool-name: HikariCP

4. JPA 配置

配置 JPA 相关属性,如是否生成 DDL 和显示 SQL:

spring:
  jpa:
    hibernate:
      ddl-auto: update  # 自动更新数据库表结构
    show-sql: true  # 显示 SQL 语句
    properties:
      hibernate:
        format_sql: true  # 格式化 SQL 语句

5. 多环境配置

Spring Boot 支持多环境配置,通过配置文件命名和 spring.profiles.active 属性实现。以下示例展示了默认配置和开发环境配置:

application.yaml (默认配置):

spring:
  profiles:
    active: dev  # 激活的配置文件
  datasource:
    url: jdbc:mysql://localhost:3306/defaultdb
    username: default
    password: default

application-dev.yaml (开发环境配置):

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/devdb
    username: dev
    password: dev

6. 自定义配置

可以在 application.yaml 中定义自定义配置,并在代码中使用 @Value 注解或 @ConfigurationProperties 绑定:

myapp:
  feature:
    enable: true
  timeout: 5000

在代码中使用:

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

@Component
public class MyAppConfig {

    @Value("${myapp.feature.enable}")
    private boolean featureEnable;

    @Value("${myapp.timeout}")
    private int timeout;

    // getters and setters
}

7. 安全配置

配置 Spring Security 的相关属性:

spring:
  security:
    user:
      name: user  # 默认用户名
      password: password  # 默认密码
    oauth2:
      client:
        registration:
          google:
            client-id: your-client-id
            client-secret: your-client-secret

8. 国际化配置

配置应用的国际化支持,指定默认语言和可用语言:

spring:
  messages:
    basename: messages  # 消息资源文件名
    encoding: UTF-8
    fallback-to-system-locale: false
    cache-duration: 3600
  i18n:
    locales:
      - en_US
      - zh_CN

三、详细配置示例

下面是一个综合性的 application.yaml 配置示例,涵盖了上述多个配置项:

spring:
  application:
    name: my-application

  profiles:
    active: dev

  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      minimum-idle: 5
      maximum-pool-size: 20
      idle-timeout: 30000
      pool-name: HikariCP

  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate:
        format_sql: true

  security:
    user:
      name: user
      password: password
    oauth2:
      client:
        registration:
          google:
            client-id: your-client-id
            client-secret: your-client-secret

  messages:
    basename: messages
    encoding: UTF-8
    fallback-to-system-locale: false
    cache-duration: 3600

  i18n:
    locales:
      - en_US
      - zh_CN

logging:
  level:
    root: INFO
    com.example: DEBUG
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"
  file:
    path: /var/log/my-application

server:
  port: 8080

myapp:
  feature:
    enable: true
  timeout: 5000

四、总结

application.yaml 是 Spring Boot 中配置应用程序的核心文件。通过 YAML 语法,能够简洁、清晰地组织各类配置项,从基本信息到复杂的多环境配置,再到自定义参数,application.yaml 提供了丰富的配置能力。掌握 application.yaml 的用法,可以大大提升 Spring Boot 应用的开发效率和可维护性。希望本文对你理解和使用 application.yaml 配置文件有所帮助。