SpringBoot配置文件的加载位置 迈不过友情╰ 2022-05-15 01:51 315阅读 0赞 SpringBoot启动会扫描以下位置的application.yml或者 application.properties文件作为SpringBoot的默认配置文件。 ***-file:./config/ *** ***-file:./*** ***-classpath:/config/*** ***-classpath:/*** ***即根目录下的config目录下,然后是 根目录下,然后是classpath路径下的config目录下,最后是classpath路径下。*** 优先级由高到低,高优先级的配置会覆盖低优先级的配置。 eg.假如:根目录下的config目录下定义端口为8084, 根目录下定义端口为8083 ,classpath路径下的config目录定义端口为8082,classpath路径下定义端口为8081,最后启动,启动的端口为8084 ***,高优先级会覆盖低优先级。*** ***注意: 并不是高优先级的被加载了,低优先级的就不会再加载,实际上是SpringBoot会从这四个位置全部加载主配置文件,并且还能产生互相配置的效果。*** 例如: 其它三个位置的主配置文件仅仅定义了端口,在最低优先级的classpath路径下的配置文件中配置项目访问路径,如下: ![70][] 定义一个简单的Controller ,用来测出访问路径。 ![70 1][] 请看:访问路径变为 : ![70 2][] ***除此外,我们还可以通过spring.config.location来改变默认的配置文件位置。*** ***项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定默认加载的这些配置文件共同起作用形成互补配置。*** ***eg :*** 在 G盘目录下,创建一个application.properties文件(yml也可以),定义端口为8085 打包项目,启动命令行:java -jar spring-boot-02-config-02.0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties 回车运行。 ![70 3][] 浏览器访问: http:localhost:8005/boot02/hello ,显然外部指定的配置文件生效了,并且与之前的主配置文件形成了互补配置 ![70 4][] ### 外部配置加载顺序 ### SpringBoot也可以从以下位置加载配置,优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置形成互补配置。 1. 命令行参数 eg: java -jar spring-boot-02-config-02.0.0.1-SNAPSHOT.jar --server.port=8087 2. 来自java:comp/env的NDI属性 3. Java系统属性(System.getProperties() ) 4. 操作系统环境变量 5. RandomValuePropertySource配置的random.\*属性值 *** ---- 由jar包外向jar包内进行寻找:*** *** 优先加载带profile*** 6. jar包外部的application-\{profile\}.properties或application.yml(带spring.profile)配置文件 将打好的jar包放在一个目录下,比如叫做 hello的文件夹,然后再该文件夹下新建一个名为application.yml的文件,其中指定 port为8088 ,访问路径为/boot ,然后命令行直接启动项目。java -jar spring-boot-02-config-02.0.0.1-SNAPSHOT.jar 浏览器通过 localhost:8088/boot/hello 可以正常访问,表示同级目录下的配置文件生效了。 ![70 5][] ![70 6][] 访问情况如下: ![70 7][] 7. jar包内部的application-\{profile\}.properties或application.yml(带spring.profile)配置文件 *** 8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件*** 8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件 9. jar包内部的application.properties或application.yml(不带spring.profile)配置文件 10. @Configuration注解类上的propertySource 11. 通过SpringApplication.setDefaultProperties指定的默认属性。 所有支持的配置加载来源: 参考官方文档 [SpringBoot外部配置][SpringBoot] 写在最后: 当同一个目录下同时存在properties和yml文件时,会优先加载properties文件里的内容,两个文件中的内容会进行互补操作,即SpringBoot会读取两份文件中的所有内容,会加载所有不同的配置项,汇成一个总的配置,如果同一个配置两个文件中都存在,那么properties中的配置会被加载,而忽略yml文件中的配置。 eg: 在springBoot的resources目录下同时存在application.properties和application.yml,并且文件内容分别如下: server.port=8084 server.tomcat.max-threads=100 server: port: 8085 tomcat: max-connections: 50000 那么,最终的配置是 端口为8084 ,并且tomcat配置了max-threads,值为100 ,max-connections,值为500 [70]: /images/20220515/da22a554c0394481a462257154e849d9.png [70 1]: /images/20220515/4840cf657739438aa49569ffbcae5ee9.png [70 2]: /images/20220515/0d9ba3be02404ddc8599c5363f3560c5.png [70 3]: /images/20220515/1cd89e68d9bd401687d1fd545a85b348.png [70 4]: /images/20220515/c81cbae1862e4f4ab93d1ef0d1e2c0ba.png [70 5]: /images/20220515/2cf3aa344f594fc3b1ec5d41cf14ed83.png [70 6]: /images/20220515/fd4e1917f9ae4c499c3f5201682671c5.png [70 7]: /images/20220515/dcd73c58163c448889e5444a3dc021cb.png [SpringBoot]: https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/#boot-features-external-config
还没有评论,来说两句吧...