⚙️ 第6章 SpringBoot 配置文件

掌握SpringBoot配置管理 - 从基础配置到高级特性

学习进度:6/18 章节 (33%)

💻 查看完整代码 - 在线IDE体验

🎯 本章学习目标

  • 理解SpringBoot配置文件的作用
  • 掌握Properties和YAML格式
  • 学会多环境配置管理
  • 了解配置文件的优先级
  • 掌握外部化配置的使用

⏰ 预计学习时间

1.5小时(理论学习 + 配置实践)

📋 配置文件概述

SpringBoot支持的配置格式:

  • application.properties:传统的键值对格式
  • application.yml/yaml:YAML格式,层次化配置
  • 环境变量:系统环境变量
  • 命令行参数:启动时传入的参数
  • 外部配置文件:jar包外的配置文件

💡 配置文件位置

SpringBoot会按优先级顺序查找配置文件:classpath根目录、classpath:/config/、当前目录、当前目录/config/

📄 Properties 格式
# 服务器配置 server.port=8080 server.servlet.context-path=/api # 数据库配置 spring.datasource.url=jdbc:mysql://localhost:3306/demo spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # JPA配置 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true # 日志配置 logging.level.com.example=DEBUG logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
优点:
  • 简单易懂
  • IDE支持好
  • 传统格式
缺点:
  • 冗余较多
  • 层次不清晰
  • 不支持复杂结构
📄 YAML 格式
# 服务器配置 server: port: 8080 servlet: context-path: /api # 数据库配置 spring: datasource: url: jdbc:mysql://localhost:3306/demo username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # JPA配置 jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: format_sql: true # 日志配置 logging: level: com.example: DEBUG pattern: console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"
优点:
  • 层次清晰
  • 简洁易读
  • 支持复杂结构
缺点:
  • 对缩进敏感
  • 学习成本稍高
  • 调试相对困难

🌍 多环境配置管理

SpringBoot支持通过Profile机制管理不同环境的配置,实现开发、测试、生产环境的配置分离

🔧 开发环境 (dev)

用于本地开发调试

# application-dev.yml server: port: 8080 spring: datasource: url: jdbc:h2:mem:devdb username: sa password: h2: console: enabled: true logging: level: root: DEBUG
🧪 测试环境 (test)

用于集成测试

# application-test.yml server: port: 8081 spring: datasource: url: jdbc:mysql://test-db:3306/testdb username: test_user password: test_pass jpa: hibernate: ddl-auto: create-drop logging: level: root: INFO
🚀 生产环境 (prod)

用于生产部署

# application-prod.yml server: port: 80 spring: datasource: url: jdbc:mysql://prod-db:3306/proddb username: ${DB_USERNAME} password: ${DB_PASSWORD} jpa: hibernate: ddl-auto: validate show-sql: false logging: level: root: WARN
⚙️ 主配置文件

指定激活的Profile

# application.yml spring: profiles: active: dev # 默认激活开发环境 # 通用配置 app: name: "My Spring Boot App" version: "1.0.0"

🔧 Profile激活方式

  • 配置文件:spring.profiles.active=prod
  • 命令行:java -jar app.jar --spring.profiles.active=prod
  • 环境变量:SPRING_PROFILES_ACTIVE=prod
  • IDE配置:在运行配置中设置Active profiles

🔧 常用配置属性详解

🌐 服务器配置

server: port: 8080 # 端口号 servlet: context-path: /api # 上下文路径 session: timeout: 30m # 会话超时 compression: enabled: true # 启用压缩 mime-types: text/html,text/css,application/json ssl: enabled: false # SSL配置

🗄️ 数据源配置

spring: datasource: url: jdbc:mysql://localhost:3306/demo username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver hikari: # 连接池配置 maximum-pool-size: 20 minimum-idle: 5 connection-timeout: 30000 idle-timeout: 600000

🔍 JPA配置

spring: jpa: hibernate: ddl-auto: update # 数据库表更新策略 naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl show-sql: true # 显示SQL properties: hibernate: format_sql: true # 格式化SQL dialect: org.hibernate.dialect.MySQL8Dialect

📝 日志配置

logging: level: root: INFO # 根日志级别 com.example: DEBUG # 包级别日志 org.springframework.web: DEBUG org.hibernate.SQL: DEBUG pattern: console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" file: name: logs/application.log

🌍 外部化配置

配置优先级(从高到低):

  1. 命令行参数
  2. SPRING_APPLICATION_JSON中的属性
  3. ServletConfig初始化参数
  4. ServletContext初始化参数
  5. JNDI属性
  6. Java系统属性
  7. 操作系统环境变量
  8. jar包外的application-{profile}.properties
  9. jar包内的application-{profile}.properties
  10. jar包外的application.properties
  11. jar包内的application.properties

💡 实用技巧

生产环境建议使用环境变量或外部配置文件,避免敏感信息打包到jar中

🔐 配置加密

敏感信息处理:

  • 使用环境变量存储密码
  • 使用Spring Cloud Config加密
  • 使用Jasypt加密配置
  • 使用外部密钥管理系统

环境变量示例:

# 配置文件中使用环境变量 spring: datasource: url: ${DATABASE_URL:jdbc:h2:mem:testdb} username: ${DATABASE_USERNAME:sa} password: ${DATABASE_PASSWORD:} # 自定义配置 app: jwt: secret: ${JWT_SECRET:default-secret} expiration: ${JWT_EXPIRATION:86400}

命令行启动示例:

# 设置环境变量 export DATABASE_URL=jdbc:mysql://prod-db:3306/proddb export DATABASE_USERNAME=prod_user export DATABASE_PASSWORD=secure_password # 启动应用 java -jar app.jar --spring.profiles.active=prod

✅ 配置验证

使用@ConfigurationProperties验证:

@ConfigurationProperties(prefix = "app") @Component @Validated public class AppProperties { @NotBlank(message = "应用名称不能为空") private String name; @Min(value = 1, message = "端口号必须大于0") @Max(value = 65535, message = "端口号不能超过65535") private int port = 8080; @Valid private Database database = new Database(); public static class Database { @NotBlank(message = "数据库URL不能为空") private String url; @NotBlank(message = "用户名不能为空") private String username; // getter和setter } // getter和setter }

⚠️ 注意事项

  • 启用配置验证需要添加spring-boot-starter-validation依赖
  • 验证失败会导致应用启动失败
  • 建议为所有配置属性添加默认值

🎯 最佳实践

配置管理建议:

  • 使用YAML格式提高可读性
  • 合理使用Profile分离环境
  • 敏感信息使用环境变量
  • 为配置属性添加验证
  • 使用@ConfigurationProperties替代@Value

性能优化:

  • 避免在配置中使用复杂表达式
  • 合理设置连接池参数
  • 启用适当的缓存配置
  • 配置合理的超时时间

🏆 核心要点

配置文件是SpringBoot应用的重要组成部分,合理的配置管理能够提高应用的可维护性和部署灵活性

🎉 恭喜完成第6章学习!

你已经掌握了SpringBoot配置文件的使用方法,接下来让我们学习SpringBoot的日志系统。

📚 进入第7章:SpringBoot 日志 ⬅️ 返回第5章 🏠 返回课程首页