SpringBoot的配置文件加载位置,以及加载的优先级

    技术2024-12-23  15

    通过目录演示一下加载的优先级,优先级越高的会覆盖低的优先级。 配置文件加载位置 springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

    file: ./config/ ​ file: ./ ​ classpath: /config/ ​ classpath: / -->first load ↑(最开始加载,但是会被高优先级覆盖)

    优先级由高到底,高优先级的配置会覆盖低优先级的配置(优先级低的先加载)。

    互补配置 这四个文件会形成互补文件,并不是说加载高级的就不加载低级的了。

    注意: 项目根路径下的配置文件maven编译时不会打包过去,需要修改pom文件,

    <resources> <resource> <directory>.</directory> <filtering>true</filtering> <includes> <include>**/*.properties</include> <include>**/*.yaml</include> </includes> </resource> </resources>

    还可以通过spring.config.location来改变默认的配置文件位置。 项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

    java -jar xxx.jar --spring.config.location=配置文件的绝对路径。

    1,命令行参数 所有的配置都可以在命令行上进行指定

    java -jar xxx.jar --server.port=8087 --server.context-path=/abc Copy to clipboardErrorCopied

    多个配置用空格分开; --配置项=值

    2,来自java:comp/env的JNDI属性 ⤴️

    3,Java系统属性(System.getProperties()) ⤴️

    4,操作系统环境变量 ⤴️

    5,RandomValuePropertySource配置的random.*属性值 ⤴️ 由jar包外向jar包内进行寻找;

    再来加载不带profile 6,jar包外部的application.properties或application.yml(不带spring.profile)配置文件 ⤴️ 7,jar包内部的application.properties或application.yml(不带spring.profile)配置文件 ⤴️ 优先加载带profile 8,jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件 ⤴️ 9,jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件 ⤴️ 10,@Configuration注解类上的@PropertySource ⤴️ 11,通过SpringApplication.setDefaultProperties指定的默认属性 ⤴️

    其实正常情况下好多用不到,官方文档给出了17种,也不会去学每一种 实现方式。这些种方式也是互补配置,相同配置通过一定的优先级控制。。。外部配置加载顺序官方文档

    Processed: 0.009, SQL: 9