Spring Boot配置文件

一、基础配置

1. 热部署

  • 依赖:导入 spring-boot-devtools(optional=true);
  • 触发:修改代码或配置文件后,按 Ctrl+F9 即可热部署,无需重启应用。

2. 配置文件类型

  • 固定文件名:application.properties(键值对格式)或 application.yml(YAML 格式,以数据为中心,更简洁)。
  • YAML 语法:
    • 键值对:k:(空格) v,大小写敏感;
    • 层级关系:通过缩进控制(左对齐为同一层级);
    • 字面量:直接赋值,字符串默认不加引号(双引号保留特殊字符,单引号转义特殊字符);
    • 对象 / Map:缩进后按 k:v 格式配置;
    • 数组 / List:用 "- 值" 表示元素,支持行内写法(如 pets: [cat, dog, pig])。

3. 配置文件值注入

  • 方式 1:++@ConfigurationProperties++:批量绑定配置文件属性,需配合 @Component(容器组件),支持松散绑定、JSR303 数据校验和复杂类型封装。
  • 方式 2:++@Value++:单个属性注入,支持字面量、${key}(从配置 / 环境变量取值)和 #{SpEL},不支持松散绑定和复杂类型。
  • 依赖提示:导入 spring-boot-configuration-processor 依赖,编写配置时获得语法提示。
  • 乱码解决:IDEA 中设置 File Encodings,将 Properties 文件默认编码设为 UTF-8,并勾选 "Transparent native-to-ascii conversion"。

4. 数据校验

  • 步骤:在实体类上添加 @Validated 注解,在属性上添加校验注解(如 @Email、@NotNull),仅 @ConfigurationProperties 支持。

二、高级配置

1. 配置文件相关注解

  • ++@PropertySource++:加载指定配置文件(如 @PropertySource (value = "classpath:person.properties")),配合 @ConfigurationProperties 使用。
  • ++@ImportResource++:导入 Spring XML 配置文件(如 @ImportResource (locations = "classpath:beans.xml")),使传统 XML 配置生效。
  • 推荐方案:Spring Boot 建议用全注解替代 XML,通过 @Configuration(配置类)+@Bean(注册组件)向容器添加组件。

2. 配置文件占位符

  • 随机数:、{random.int [1024,65536]} 等;
  • 默认值:默认值(如{person.hello:hello}_dog)。

3. Profile 多环境配置

  • 多文件方式:创建 application-{profile}.properties/yml(如 application-dev.yml、application-prod.yml),默认使用 application.properties。
  • YAML 多文档块:用 "---" 分隔文档,通过 spring.profiles 指定环境,spring.profiles.active 激活环境。
  • 激活方式:
    • 配置文件:spring.profiles.active=dev;
    • 命令行:java -jar xxx.jar --spring.profiles.active=dev;
    • 虚拟机参数:-Dspring.profiles.active=dev。

4. 配置文件加载位置(优先级从高到低)

  1. file:./config/(项目根目录 config 文件夹);
  2. file:./(项目根目录);
  3. classpath:/config/(类路径 config 文件夹);
  4. classpath:/(类路径根目录)。
  • 特性:高优先级覆盖低优先级,所有位置的配置文件会互补加载。

5. 外部配置加载顺序(优先级从高到低)

  1. 命令行参数(如 --server.port=8087);
  2. JNDI 属性(java:comp/env);
  3. Java 系统属性(System.getProperties ());
  4. 操作系统环境变量;
  5. RandomValuePropertySource 配置的随机数;
  6. ++jar 包外的 application-{profile}.properties/yml;++
  7. ++jar 包内的 application-{profile}.properties/yml;++
  8. ++jar 包外的 application.properties/yml;++
  9. ++jar 包内的 application.properties/yml;++
  10. @PropertySource 注解加载的配置;
  11. SpringApplication.setDefaultProperties 指定的默认属性。

三、自动配置原理

1. 核心流程

  1. Spring Boot 启动时加载主配置类,@EnableAutoConfiguration 开启自动配置
  2. @EnableAutoConfiguration 通过 EnableAutoConfigurationImportSelector 扫描所有 jar 包类路径下的 META-INF/spring.factories 文件;
  3. 读取 spring.factories 中 EnableAutoConfiguration 对应的所有自动配置类(xxxAutoConfiguration),导入容器并生效;
  4. 自动配置类通过 @Conditional 派生注解(如 @ConditionalOnWebApplication、@ConditionalOnClass)判断是否满足生效条件;
  5. 生效的自动配置类从对应的 xxxProperties 类中获取属性值(xxxProperties 与配置文件绑定),完成组件配置。

2. @Conditional 派生注解(

|------------------------------|-------------------|
| 注解 | 作用(满足条件才生效) |
| @ConditionalOnJava | 系统 Java 版本符合要求 |
| @ConditionalOnBean | 容器中存在指定 Bean |
| @ConditionalOnMissingBean | 容器中不存在指定 Bean |
| @ConditionalOnWebApplication | 当前是 Web 环境 |
| @ConditionalOnClass | 系统中存在指定类 |
| @ConditionalOnProperty | 配置文件中存在指定属性且值符合要求 |

3. 查看自动配置报告

  • 配置:在 application.properties 中添加 debug=true;
  • 输出:控制台打印 AUTO-CONFIGURATION REPORT,包含 Positive matches(生效的自动配置类)和 Negative matches(未生效的自动配置类)。
相关推荐
龙智DevSecOps解决方案1 小时前
Java开发基础:什么是Spring Boot?一文了解其优势、对比以及如何通过Perforce JRebel实现高效开发
java·开发语言·spring boot·jrebel·perforce·java开发
一直都在5721 小时前
手写tomcat(1):Socket
java·tomcat
PPPPickup1 小时前
easychat---创建,获取,获取详细,退群,解散,添加与移除群组
java·开发语言·后端·maven
luod1 小时前
SpringBoot自动初始化数据
java·spring boot·spring
牛顿没有错1 小时前
lombok中@Data、@AllArgsConstructor、@NoArgsConstructor不生效
java·spring boot·spring·intellij-idea
南部余额1 小时前
深入理解 Spring Boot:自动化配置类与 FactoryBean 的异同与协作
java·spring boot·自动化
摇滚侠2 小时前
2025最新 SpringCloud 教程,熔断规则-熔断策略-异常数,笔记46
java·笔记·spring cloud
Home2 小时前
23 种设计模式--桥接(Bridge)模式(结构型模式二)
java·后端
摇滚侠2 小时前
2025最新 SpringCloud 教程,熔断规则-熔断策略-慢调用比例,笔记44
java·笔记·spring cloud