一、基础配置
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. 配置文件加载位置(优先级从高到低)
- file:./config/(项目根目录 config 文件夹);
- file:./(项目根目录);
- classpath:/config/(类路径 config 文件夹);
- classpath:/(类路径根目录)。
- 特性:高优先级覆盖低优先级,所有位置的配置文件会互补加载。
5. 外部配置加载顺序(优先级从高到低)
- 命令行参数(如 --server.port=8087);
- JNDI 属性(java:comp/env);
- Java 系统属性(System.getProperties ());
- 操作系统环境变量;
- RandomValuePropertySource 配置的随机数;
- ++jar 包外的 application-{profile}.properties/yml;++
- ++jar 包内的 application-{profile}.properties/yml;++
- ++jar 包外的 application.properties/yml;++
- ++jar 包内的 application.properties/yml;++
- @PropertySource 注解加载的配置;
- SpringApplication.setDefaultProperties 指定的默认属性。
三、自动配置原理
1. 核心流程
- Spring Boot 启动时加载主配置类,@EnableAutoConfiguration 开启自动配置;
- @EnableAutoConfiguration 通过 EnableAutoConfigurationImportSelector 扫描所有 jar 包类路径下的 META-INF/spring.factories 文件;
- 读取 spring.factories 中 EnableAutoConfiguration 对应的所有自动配置类(xxxAutoConfiguration),导入容器并生效;
- 自动配置类通过 @Conditional 派生注解(如 @ConditionalOnWebApplication、@ConditionalOnClass)判断是否满足生效条件;
- 生效的自动配置类从对应的 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(未生效的自动配置类)。