SpringBoot配置文件

Spring Boot 配置文件

Spring Boot 支持 application.properties 和 YAML(application.yml / application.yaml)。三种格式表达的是同一套属性模型,项目中选择一种保持一致即可。

YAML 语法

YAML 使用缩进表达层级:

代码块YAML · 12 行收起展开
server:
  port: 8080
  address: 127.0.0.1

user:
  name: Tom
  age: 18
  gender: male
  hobbies:
    - Java
    - Game
    - Sport

规则:

  • 冒号后必须有空格。
  • 缩进只用空格,不使用 Tab。
  • 同级元素左侧对齐,具体空格数可以自定但必须一致。
  • # 后是注释。
  • 含特殊字符、布尔歧义或前导零的值应加引号,例如 "0123"

现代 YAML 解析器对前导零的行为与版本有关;配置中的电话、编号、日期等本来就是文本,显式加引号最稳妥。

properties 对照

代码块PROPERTIES · 3 行收起展开
server.port=8080
server.address=127.0.0.1
spring.application.name=javaweb-demo

等价 YAML:

代码块YAML · 6 行收起展开
server:
  port: 8080
  address: 127.0.0.1
spring:
  application:
    name: javaweb-demo

数据源与 MyBatis

代码块YAML · 12 行收起展开
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/web
    username: ${DB_USER}
    password: ${DB_PASSWORD}
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:mapper/*.xml

SQL 标准输出只适合本地学习和排错,生产环境应使用受控日志级别并避免打印敏感参数。

绑定为配置对象

代码块JAVA · 6 行收起展开
@ConfigurationProperties(prefix = "storage")
public record StorageProperties(
        String endpoint,
        String bucket,
        Duration timeout) {
}

集中绑定比在多个类中散落 @Value 更容易校验、测试和重构。配置类可配合 @Validated 与 Bean Validation。

环境与秘密

代码块YAML · 3 行收起展开
spring:
  profiles:
    active: ${SPRING_PROFILES_ACTIVE:dev}
  • 公共默认值放入版本库。
  • 环境差异通过 Profile、环境变量、系统属性或配置中心注入。
  • 密码、Token、私钥不能提交到 Git。
  • 默认值只用于非敏感且安全的配置。

优先级理解

命令行参数、Java 系统属性、环境变量和配置文件可以覆盖同一属性。不要只背一个简化排序表;Spring Boot 版本和配置来源很多,排错时应查看最终 Environment,并使用 Actuator 的 env / configprops(注意访问控制)或启动日志确认来源。

延伸阅读