2026/6/20 8:08:41
网站建设
项目流程
娄底本地做寄生虫网站,谁做的四虎网站是多少钱,广州建设公司,购买 做网站 客户Spring Boot 配置文件优先级详解
你希望全面了解Spring Boot配置文件的优先级规则#xff0c;我会从配置格式、内部文件路径、外部配置来源、特殊规则四个维度展开#xff0c;结合实操示例帮你彻底掌握。
一、前置基础#xff1a;配置文件格式优先级
Spring Boot核心支持两种…Spring Boot 配置文件优先级详解你希望全面了解Spring Boot配置文件的优先级规则我会从配置格式、内部文件路径、外部配置来源、特殊规则四个维度展开结合实操示例帮你彻底掌握。一、前置基础配置文件格式优先级Spring Boot核心支持两种配置文件格式同一目录下的优先级关系为.properties键值对格式 .yml层级格式说明.properties格式语法为keyvalue无缩进要求兼容性更强示例server.port8080.yml格式语法为key: value冒号后必须加空格层级依赖缩进2个空格禁止tab可读性更强示例server: port: 8080若同一目录下同时存在application.properties和application.yml两者相同配置项以.properties为准不同配置项会自动合并。二、核心优先级1项目内部配置文件路径从高到低Spring Boot会自动扫描4个默认内部路径的配置文件文件名固定为application或application-{profile}如application-dev.properties路径优先级从高到低排序如下优先级路径说明1./config/项目根目录下的config子目录打包后对应jar包同级的config文件夹2./项目根目录打包后对应jar包同级目录3classpath:/config/类路径下的config子目录项目中对应resources/config/目录4classpath:/类路径根目录项目中对应resources/目录默认配置存放位置优先级最低实操示例若同时存在以下4个配置文件均配置了server.port./config/application.properties→server.port8080./application.properties→server.port8081classpath:/config/application.properties→server.port8082classpath:/application.properties→server.port8083最终项目启动端口为8080遵循路径优先级从高到低。三、核心优先级2外部配置来源高于所有内部配置除了项目内部配置文件Spring Boot还支持多种外部配置来源其优先级整体高于内部配置文件从高到低排序如下1. 命令行参数优先级最高启动jar包时通过--keyvalue传递的参数会覆盖所有其他配置来源。示例# 无论内部配置端口是多少最终端口为8090java-jarspring-boot-demo.jar--server.port80902. JVM系统属性启动时通过-Dkeyvalue传递的JVM参数优先级仅次于命令行参数。示例# 端口配置为8091若与命令行参数冲突以命令行为准java-Dserver.port8091-jarspring-boot-demo.jar3. 操作系统环境变量操作系统级别的环境变量Windows“环境变量”/Linuxexport命令配置优先级高于配置中心和外部指定配置文件。说明Spring Boot会自动转换命名规则驼峰转下划线、小写转大写示例配置项spring.profiles.active对应环境变量SPRING_PROFILES_ACTIVELinux示例# 配置激活prod环境exportSPRING_PROFILES_ACTIVEprodjava-jarspring-boot-demo.jar4. 分布式配置中心Nacos/Consul/Spring Cloud Config分布式场景下的统一配置管理优先级高于本地外部配置文件适合多实例统一配置。说明配置中心的配置可动态刷新优先级可通过配置调整默认高于本地所有配置。5. 外部指定路径配置文件通过spring.config.location或spring.config.additional-location指定外部配置文件路径优先级高于项目内部配置文件。两者区别spring.config.location覆盖默认配置路径内部4个路径失效仅加载指定路径配置spring.config.additional-location追加配置路径保留默认4个路径指定路径优先级更高推荐使用示例# 追加/opt/config/目录下的配置文件优先级高于内部配置java-jarspring-boot-demo.jar --spring.config.additional-location/opt/config/四、特殊优先级规则1. Profile配置文件的覆盖规则Spring Boot支持环境隔离配置application-{profile}.properties/yml其优先级规则激活的Profile配置 默认配置application.properties/yml多个Profile激活时通过spring.profiles.activedev,test指定后面的Profile会覆盖前面的相同配置项不同配置项合并Profile配置同样遵循「路径优先级」和「格式优先级」示例classpath:/application.properties→server.port8080、spring.application.namedemoclasspath:/application-dev.properties→server.port8081、spring.datasource.urlxxxclasspath:/application-test.properties→server.port8082激活命令--spring.profiles.activedev,test最终配置server.port8082test覆盖devdev覆盖默认spring.application.namedemo默认配置无覆盖spring.datasource.urlxxxdev配置无覆盖2. 配置项的核心原则“覆盖合并”覆盖相同配置项高优先级来源覆盖低优先级来源如命令行覆盖内部配置合并不同配置项所有来源的配置项会统一加载不会丢失如内部配置了server.port外部配置了spring.application.name两者同时生效3. 自定义配置文件PropertySource通过PropertySource注解加载自定义配置文件如custom.properties其默认优先级低于所有Spring Boot默认配置来源可通过order属性调整优先级值越小优先级越高。示例// 加载自定义配置文件指定优先级默认最低SpringBootApplicationPropertySource(valueclasspath:custom.properties,order10)publicclassDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(DemoApplication.class,args);}}五、优先级总览从高到低核心总结命令行参数--keyvalueJVM系统属性-Dkeyvalue操作系统环境变量分布式配置中心Nacos/Consul等外部指定路径配置spring.config.additional-locationspring.config.location项目根目录./config/下的配置文件.properties.yml项目根目录./下的配置文件.properties.yml类路径classpath:/config/下的配置文件.properties.yml类路径classpath:/下的配置文件.properties.yml默认存放位置PropertySource加载的自定义配置文件默认最低六、常见误区提醒误区1认为.yml优先级高于.properties→ 实际同一目录下.properties优先级更高误区2多个Profile激活时忽略顺序 → 后面的Profile会覆盖前面的相同配置误区3滥用spring.config.location→ 会覆盖默认配置路径推荐使用spring.config.additional-location追加配置误区4忽略命令行参数的最高优先级 → 线上调试时可通过命令行快速覆盖配置无需修改配置文件总结核心优先级逻辑外部配置 内部配置、properties yml、特定路径 默认路径、Profile配置 默认配置最高优先级是命令行参数最低优先级默认是PropertySource自定义配置配置冲突时遵循“覆盖原则”配置不冲突时遵循“合并原则”线上部署时优先通过spring.config.additional-location指定外部配置文件方便修改无需重新打包