SpringBoot 底层原理完整教程(上篇・配置文件与配置优先级)
本篇为整套 SpringBoot 原理系列第一部分聚焦多格式配置文件、多环境配置加载优先级、项目打包运行、VM 系统参数、命令行参数全套知识点配套完整配置示例、IDEA 实操截图说明、jar 包运行命令适合基础巩固、面试背诵中篇讲解 Spring IOC Bean 管理作用域、线程安全、第三方 BeanBean 注解下篇深度拆解 SpringBoot 核心两大特性起步依赖、自动配置、EnableAutoConfiguration 源码、自定义 Starter 落地实战。一、SpringBoot 三种配置文件格式SpringBoot 支持三类配置文件存放路径统一为resources资源目录作用完全一致仅语法格式有区别。1. properties键值对格式早期主流语法keyvalue层级靠点分割无缩进# 服务端口 server.port8081 # 数据库配置 spring.datasource.usernameroot spring.datasource.password1234562. yml /yaml层级缩进格式企业现在统一推荐yaml 是 yml 完整全称两者语法完全相同项目统一选其一即可冒号后必须加空格靠空格区分层级可读性更强。server: port: 8082 spring: datasource: username: root password: 123456开发规范硬性要求一个项目中只允许使用一种配置格式混合使用极易出现配置覆盖、值错乱问题行业标准统一选用application.yml。二、五种配置加载方式 完整优先级排序SpringBoot 一共支持 5 种配置来源优先级从低到高数值越大优先级越高高优先级会覆盖低优先级相同配置application.yaml最低最容易被覆盖application.ymlapplication.propertiesJava 系统属性VM Options-D 开头命令行参数Program Arguments-- 开头优先级最高1. 配置文件演示同项目同时写三类文件设置不同端口application.yaml → port:8083application.yml → port:8082application.properties → port:8081项目无额外参数启动最终端口为 8081properties 覆盖 yaml/yaml。2. Java 系统属性VM 参数 -DxxxxxxIDEA 运行配置操作路径Run/Debug Configurations → VM options书写格式-D配置名值示例-Dserver.port9000作用JVM 启动时传入系统全局变量优先级高于所有配置文件。3. 命令行参数最高优先级 --xxxxxx两种使用场景场景 1 IDE 内配置Program Arguments 输入框填写--server.port10010场景 2 打包 jar 后运行生产服务器最常用maven 执行 package 打包项目得到 jar 包cmd / 服务器终端执行java -Dserver.port9000 -jar tlias-web-management-0.0.1-SNAPSHOT.jar --server.port10010解析-Dserver.port9000JVM 系统参数--server.port10010命令行参数优先级更高最终启动端口 10010优先级核心结论命令行参数 JVM 系统属性 properties yml yaml优先级越高越晚加载相同 key 直接覆盖前面所有配置值生产环境常用打包运行时通过--端口/数据库地址动态切换环境无需修改配置文件重新打包。三、SpringBoot 项目打包完整流程1. 打包必备插件SpringBoot 项目 pom.xml 必须内置spring-boot-maven-plugin打包插件新建项目 Spring Initializr 会自动生成缺失需手动添加build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build作用打包时把内嵌 Tomcat、项目代码、所有依赖 jar 一并打入最终可执行包普通 jar 无法直接运行。2. 打包操作IDEA 右侧 Maven 面板 → Lifecycle → 双击package编译打包完成后target 目录生成可执行 jar 包。3. jar 包运行命令基础运行java -jar 项目名.jar携带自定义端口参数覆盖配置文件java -jar tlias.jar --server.port8088携带 JVM 参数 数据库配置java -Dspring.profiles.activeprod -jar tlias.jar --spring.datasource.password666666四、多配置文件覆盖实操验证案例测试需求分别在 yaml/yml/properties 设置不同端口再添加 VM 参数、命令行参数观察最终生效端口application.yamlserver.port8083application.ymlserver.port8082application.propertiesserver.port8081VM Options-Dserver.port9000Program Arguments--server.port10010启动项目控制台打印端口 10010完全印证优先级规则。生产场景价值开发环境固定配置写 yml测试 / 生产服务器启动时通过命令行动态修改数据库、端口、日志参数无需修改源码、无需重新打包运维部署更灵活。五、yml 语法补充拓展上篇配套实操1. 层级缩进规则只能使用空格缩进禁止 Tab 键IDEA 会自动转换 Tab 为空格同层级配置左侧空格对齐key:冒号后面必须跟一个空格再写值无空格语法报错。2. 特殊值处理数字字符串手机号、0 开头编码需要用单 / 双引号包裹否则 yml 会自动识别为数字phone: 0138001380003. 集合 / 数组写法hobby: - java - basketball - travel六、上篇全文总结SpringBoot 三种配置yaml、yml、properties推荐统一使用 yml禁止项目混合多格式五种配置来源优先级由低至高yaml yml properties JVM 系统属性 (-D) 命令行参数 (--)-D 为 JVM 系统参数-- 为命令行参数命令行优先级最高可动态覆盖任意配置项目打包依赖 spring-boot-maven-plugin 插件打包后 java -jar 运行生产部署可在 jar 运行命令中传入数据库、端口参数无需修改配置文件。上篇拓展实操练习新建 SpringBoot 项目同时创建三种配置文件设置不同端口观察启动端口IDE 添加 VM 参数、命令行参数验证高优先级覆盖效果使用 Maven package 打包项目cmd 执行 jar 并通过 -- 修改启动端口。上篇面试高频考点SpringBoot 支持哪些配置文件三种格式区别配置加载优先级从低到完整排序3 -D 和 -- 参数分别代表什么优先级谁更高SpringBoot 打包必须插件是什么作用生产环境为什么推荐使用命令行传递配置