当前位置: 首页 > news >正文

SpringBoot配置文件详解

SpringBoot配置文件详解

1. 热部署配置

Spring Boot提供了spring-boot-devtools模块来支持热部署,提高开发效率:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>

使用方式:修改Java代码或配置文件后,按Ctrl+F9即可实现热部署。

2. 配置文件基础

Spring Boot支持两种全局配置文件:

  • application.properties
  • application.yml

YAML简介

YAML(YAML Ain't Markup Language)是一种以数据为中心的配置文件格式,比JSON和XML更适合做配置。

YAML基本语法​:

  • 使用k:(空格)v表示键值对(空格必须有)
  • 使用空格缩进控制层级关系
  • 属性和值大小写敏感

值写法​:

  • 字面量(数字、字符串、布尔)
    • 字符串默认不加引号
    • "":双引号,不转义特殊字符
    • '':单引号,转义特殊字符
  • 对象/Map:使用缩进表示层级
  • 数组:使用-表示元素

3. 配置文件值注入

3.1 基本注入方式

导入配置文件处理器,提供配置提示:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

3.2 @Value vs @ConfigurationProperties

特性@Value@ConfigurationProperties
功能单个注入批量注入
松散绑定不支持支持
SpEL表达式支持不支持
复杂类型封装不支持支持
数据校验不支持支持

3.3 数据校验示例

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {@Emailprivate String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;// getters/setters
}

3.4 相关注解

  • @PropertySource:加载指定配置文件
  • @ImportResource:导入Spring配置文件
  • @Bean:替代XML配置方式

推荐配置方式​:

@Configuration
public class MyAppConfig {@Beanpublic HelloService helloService(){return new HelloService();}
}

4. 配置文件高级特性

4.1 占位符

person.last-name=张三${random.uuid}
person.age=${random.int}
person.dog.name=${person.hello:hello}_dog

支持:

  • 随机数:${random.value}, ${random.int}, ${random.int(10)}
  • 默认值:${key:defaultValue}

4.2 Profile配置

多Profile文件​:

  • application-{profile}.properties/yml

yml多文档块​:

server:port: 8081
spring:profiles:active: dev
---
server:port: 8082
spring:profiles: dev

激活方式​:

  1. 配置文件中指定:spring.profiles.active=dev
  2. 命令行:--spring.profiles.active=dev
  3. 虚拟机参数:-Dspring.profiles.active=dev

4.3 配置文件加载位置

Spring Boot会从以下位置加载配置文件(优先级从高到低):

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

高优先级配置会覆盖低优先级配置,所有配置会形成互补。

4.4 外部配置加载顺序

  1. 命令行参数
  2. JNDI属性
  3. Java系统属性
  4. 操作系统环境变量
  5. 随机属性
  6. jar包外部的profile配置文件
  7. jar包内部的profile配置文件
  8. jar包外部的默认配置文件
  9. jar包内部的默认配置文件
  10. @PropertySource
  11. 默认属性

5. 自动配置原理

5.1 工作原理

  1. SpringBoot启动时加载主配置类,启用自动配置功能@EnableAutoConfiguration
  2. 通过EnableAutoConfigurationImportSelector导入组件
  3. 扫描META-INF/spring.factories中配置的自动配置类
  4. 每个自动配置类根据条件决定是否生效
  5. 生效的配置类向容器中添加组件,组件属性从xxxxProperties类获取

5.2 条件注解

注解说明
@ConditionalOnJava系统Java版本是否符合要求
@ConditionalOnBean容器中存在指定Bean
@ConditionalOnMissingBean容器中不存在指定Bean
@ConditionalOnClass系统中有指定的类
@ConditionalOnMissingClass系统中没有指定的类
@ConditionalOnProperty系统中指定的属性是否有指定值

5.3 调试自动配置

设置debug=true查看自动配置报告:

debug=true

报告会显示:

  • 匹配成功的自动配置类(Positive matches)
  • 未匹配的自动配置类(Negative matches)
  • 排除的自动配置类(Exclusions)

6. 最佳实践

  1. 使用YAML作为配置文件格式,结构更清晰
  2. 业务配置使用@ConfigurationProperties批量绑定
  3. 简单属性可以使用@Value注入
  4. 生产环境和开发环境使用不同的Profile配置
  5. 自定义配置应放在application.yml中,不要修改自动配置类的默认配置
  6. 复杂配置推荐使用JavaConfig方式(@Configuration + @Bean

http://www.dtcms.com/a/301660.html

相关文章:

  • jangow-01-1.0.1靶机
  • Java 后端 Cookie Session Token会话跟踪技术
  • Maven之多模块项目管理
  • c# everthing.exe 通信
  • Level MC-9“恶地”
  • 1.qt历史版本安装与多版本开发(解决被拦截问题)
  • 青少年编程能力等级测评试卷及答案 Python编程(三级)
  • 《频率之光:共生之恋》
  • C9300L Stacking堆叠
  • 人形机器人指南(十)决策
  • 快速了解线性回归算法
  • Item16:成对使用new和delete时要采取相同形式
  • Sklearn 机器学习 数值指标 混淆矩阵confusion matrix
  • Java知识体系
  • 初识 docker [上]
  • 【高等数学】第六章 定积分的应用——第三节 定积分在物理学上的应用
  • GO语言 go get 下载 下来的包存放在哪里
  • 线程安全问题的发现与解决
  • 2025 DevOps开源工具全景指南:构建面向未来的智能交付体系
  • 嵌入式软件面试八股文
  • 面试150 数字范围按位与
  • PLLIP核
  • 测试老鸟整理,物流项目系统测试+测试点分析(一)
  • 【笔记】Gibbs自由能全微分公式推导
  • AJAX 原理_第一节_XHR 对象
  • 免安装MySQL启动全解:从解压到远程访问的保姆级教程
  • U盘中毒,文件被隐藏的解决方法
  • Redis6.0+安装教程(Linux)
  • Map系列
  • docker搭建部署 onlyoffice 实现前端集成在线解析文档解决方案