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(未生效的自动配置类)。
相关推荐
2201_757830871 天前
全局异常处理器
java
知远同学1 天前
Anaconda的安装使用(为python管理虚拟环境)
开发语言·python
小徐Chao努力1 天前
【Langchain4j-Java AI开发】09-Agent智能体工作流
java·开发语言·人工智能
CoderCodingNo1 天前
【GESP】C++五级真题(贪心和剪枝思想) luogu-B3930 [GESP202312 五级] 烹饪问题
开发语言·c++·剪枝
Coder_Boy_1 天前
SpringAI与LangChain4j的智能应用-(理论篇3)
java·人工智能·spring boot·langchain
kylezhao20191 天前
第1章:第一节 开发环境搭建(工控场景最优配置)
开发语言·c#
啃火龙果的兔子1 天前
JavaScript 中的 Symbol 特性详解
开发语言·javascript·ecmascript
Coder_Boy_1 天前
基于SpringAI的智能平台基座开发-(六)
java·数据库·人工智能·spring·langchain·langchain4j
热爱专研AI的学妹1 天前
数眼搜索API与博查技术特性深度对比:实时性与数据完整性的核心差异
大数据·开发语言·数据库·人工智能·python
Mr_Chenph1 天前
Miniconda3在Windows11上和本地Python共生
开发语言·python·miniconda3